- PR -

C++で作成したDLLをVB.NETで呼び出すには

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 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++で呼び出すとちゃんとデータは取得することができました。
以上、解られるかたご教授よろしくお願いします。
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2004-12-03 23:13
自己レスです。
DLLのUCHAR* dataにはポインタの値渡しになるので、VB側の定義でByRefはおかしいですね。ByValに変更してうまくいきました。
1

スキルアップ/キャリアアップ(JOB@IT)