/clr
모드의 C++/CLI에서 버클리 DB를 사용하고 있습니다.버클리 DB와 혼합 된 C++/CLI 코드
편집 :
// DB_test1.cpp : main project file.
#include "stdafx.h"
#pragma comment(lib,"libdb51")
using namespace System;
using namespace System::Runtime::InteropServices;
int main(array<System::String ^> ^args)
{
Db SigDb(0,0);
unsigned int oFlags= DB_CREATE;
SigDb.open(NULL,"SigDb.db",0,DB_BTREE,oFlags,0);
String^ HexSig="D8B1048900ABFF8B";
wchar_t* a=(wchar_t*)Marshal::StringToHGlobalUni(HexSig).ToPointer() ;
wchar_t* A=(wchar_t*)Marshal::StringToHGlobalUni(HexSig).ToPointer();;
Dbt key1(&a,100);
Dbt data1(&A,100);
Marshal::FreeHGlobal(IntPtr(A));
int ret= SigDb.put(NULL,&key1,&data1, DB_NOOVERWRITE);
if(ret==DB_KEYEXIST){
Console::WriteLine("You are trying to insert an exist key!");
}
wchar_t DDData[200];
Dbt getKey, getData;
getKey.set_data(&a);
getKey.set_size(100);
getData.set_data(DDData);
getData.set_ulen(200);
getData.set_flags(DB_DBT_USERMEM);
Marshal::FreeHGlobal(IntPtr(a));
if(SigDb.get(NULL,&getKey,&getData,0)==DB_NOTFOUND)
Console::WriteLine("Not Found !");
else
Console::WriteLine(" {0}",Marshal::PtrToStringUni((IntPtr)DDData));
return 0;
}
코드가 성공적으로 컴파일하지만 잘못 출력을 보여줍니다이 코드를 썼다. 나는 String^ HexSig="D8B1048900ABFF8B";
을 SigDb.db
에 저장하고 똑같은 문자열을 직접 읽고 인쇄 해 둡니다. 결과는 예상대로 D8B1048900ABFF8B
처럼 나타나지 않지만 임의의 문자열로 나타납니다. 어떤 아이디어? 편집 후
: 는이 코드 세그먼트는 항상
Alex 대단히 감사합니다. 당신의 노트를 따라 가면서 문제가 해결되었습니다! – Aan