構造体からデータを取得するためにDLLの関数を呼び出す方法に問題があります...
ライブラリがどのように機能するかについてのC++の例があり、vb.netで使用したい
さて、これは実際のc++の例です。
宣言:
BOOL (WINAPIV* MyFun)(DWORD start1, DWORD stop1, P_RESULT pResult, PDWORD pTpNum, myCALLBACK lpFunc) = NULL;
電話:
// pStruc = RESULT structure
// TrpNum1, TrpNum is ULONG
ULONG TrpNum1=0;
MyFun(Start,Stop,pStruc+TrpNum,&TrpNum1,&myCB);
折り返し電話:
void __stdcall myCB (RESULT *pStruc)
{
printf ("%.3f", (double)pStruc->val1);
tpn++;
}
そしてもちろん、構造:
typedef struct {
BOOL mybool;
DWORD val1;
DWORD val2;
} RESULT, *P_RESULT;
そしてこれは私のVB.netコードです(機能していません):
Public Declare Auto Function MyFun Lib "\mydll.dll" ( _
ByVal start As UInt32, _
ByVal stop As UInt32, _
ByRef Result As RESULT, ByRef pTpNum As UInt32, ByVal lpFunc As DlgCB) As Boolean
Public Sub CallMyFun()
Dim Res As New RESULT
Dim TpN As UInt32
If MyFun(100, 200, Res, TpN, AddressOf myCB) Then
SendDebug("OK")
Else
SendDebug("Failed!")
End If
End Sub
Public Delegate Function DlgCB(ByVal Res As RESULT) As Boolean
Public Function myCB(ByVal Res As RESULT) As Boolean
Debug.Print(Res.val1)
Return True
End Function
構造:
Public Structure RESULT
Dim mybool As Boolean
Dim val1 As UInt32
Dim val2 As UInt32
End Structure
何が悪いの?
前もって感謝します。
編集:エラーは次のとおりです:「保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示していることがよくあります。」
また、コードで小さな「修正」を行います。それでも動作しません。