- - PR -
C++で作成したDLLをVB.NETで呼び出すには
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-12-03 09:12
C++で作成したDLLの引数内にUCHARの配列があり、他の引数にサイズを入れて実行するとUCHARの配列に値が返ってくるというものですが、VB.NET側でどう指定していいかわからず旨く値が返ってきません。以下ソースを書きます。
内容としてはVB側からアドレスとサイズを渡すとそのアドレスからサイズ分のデータを戻り値として返すものです。 以下C++の宣言 ULONG GETDATA(ULONG address, UCHAR* data, ULONG count) 以下VBの宣言 <DllImport("pcidebug.dll")> _ Private Function _MemReadBlock( _ ByVal Address As Int32, _ ByRef Data As IntPtr, _ ByVal Count As Int32, _ ByVal Unitsize As Int32) As Int32 End Function Const DATASIZE As Int32 = 64 * 1024 Dim Data1(DATASIZE - 1) As Byte Dim ret As Int32 Dim gch As GCHandle = GCHandle.Alloc(Data1, GCHandleType.Pinned) Dim Data As IntPtr = gch.AddrOfPinnedObject() ret = GETDATA(&HF0000, Data, DATASIZE) gch.Free() とコーディングしてみたのですが、旨く行きませんでした。ちなみにC++で呼び出すとちゃんとデータは取得することができました。 以上、解られるかたご教授よろしくお願いします。 |
|
投稿日時: 2004-12-03 23:13
自己レスです。
DLLのUCHAR* dataにはポインタの値渡しになるので、VB側の定義でByRefはおかしいですね。ByValに変更してうまくいきました。 |
1