DLL调用的问题
VC中的如下代码,该怎样写成VB.Net的代码?1、结构体指针与Handle
struct InfoSt{
UCHAR *Buffer;
ULONG Height;
UCHAR Gain[3];
};
BYTE *pData = (BYTE*)malloc(30000);
memset(pData, 0, 30000);
infoSt Info;
Info.Buffer = pData;
int nDrvNum = 0;
HANDLE hHandle = NULL;
// int DRV_InitDrv(int* nNum, struct InfoSt *pInfo, HANDLE* hDev)
DRV_InitDrv(&nDrvNum, &Info, &hHandle); //需要返回hHandle:设备句柄, 返回nDrvNum:返回设备个数
2、DLL接口中需要传入函数指针,VB应该怎么写?
//int DRV_CBFunc(HANDLE hDev, LPVOID lpFunc)
DRV_CBFunc(hHandle, func1);
void __stdcall func1(LPVOID lpParam)
{
// ...
}
//typedef VOID (WINAPI * LP_FUNC2)(int iIndex);
//int DRV_JudgeIndex(HANDLE hDev, LP_FUNC2 func2, int iIndex)
DRV_JudgeIndex(hHandle, func2, 1);
void __stdcall func2(int iIndex)
{
if (iIndex == 1)
{
// ...
}
}
3、如何自定义消息并处理?
--------------------编程问答-------------------- 1.句柄使用IntPtr类型变量.结构体如下
<StructLayout(layoutkind.Sequential)> Public Structure InfoSt
Dim Buffer() As Byte
Dim Height As UInt32
Dim Gain() As Byte
End Structure
pData直接定义为3000字节的Byte数组
2.使用委托
Delegate Sub Func(ByVal iIndex As Integer)
Sub func2(ByVal iIndex As Integer)
If iIndex = 1 Then
'todo something
End If
End Sub
'调用
DRV_JudgeIndex(hHandle, new Func(AddressOf func2), 1)
3.这里的消息具体指什么?
一般的事件可以使用Event关键字声明自定义事件,并写出事件处理方法.
也可以使用委托,在回调函数中处理.
补充:.NET技术 , VB.NET