当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,