我正在尝试与提供外部C ++ DLL文件的USB设备进行交互,并阅读了大量关于代理,编组,指针的文章,我通常会了解正在发生的事情。不幸的是,我在这个领域的实践经验让我失去了最终的解决方案。
我已经连接到设备以便成功创建会话但是有一个名为EnumDevices的函数可以枚举设备列表以用于将来的特定调用。该函数本身具有列出设备的功能,而这正是我正在努力的部分。
API中的enumdevices调用如下所示:
EnumDevices(INTERFACE,FoundDevice,NULL);
bool __stdcall FoundDevice(long data, const char *DeviceName)
{
printf("device name %s\n", DeviceName)
Return True
}
并且根据文档,FoundDevice是为每个找到的设备调用的回调方法。
在VB.Net中,我所做的如下:
创建委托函数
Delegate Function FoundDeviceDelegate(data as integer, DeviceName as PInvoker.Marshal.ByteArrayPtr) as Boolean
然后我创建了一个具有相同签名的本地函数
Private Function FoundDevice(data as integer, DeviceName as PInvoker.Marshal.ByteArrayPtr) as Boolean
Msgbox(DeviceName.ToString)
Return True
End Function
在我的主要代码中,我进行了以下声明和调用
dim devhandler as assembly.FoundDeviceHandler = AddressOf FoundDevice
dim device as new assembly.FoundDevice(devhandler)
assembly.EnumDevices(INTERFACE,device,vbNull)
('汇编'是对外部dll的引用,' INTERFACE'是一个常量'设备'期望具有两个参数的函数 - 用户和设备名)
我认为EnumDevices调用会传回设备引用,而设备引用又调用DeviceHandler,它引用委托函数,然后输出设备名称。
我得到的是'设备'上的指针值。但我正在努力将此引用回设备名称。它永远不会执行FoundDevice函数来显示消息框。
我已经阅读了很多内容,我认为我已经阅读了太多关于代理和编组等的内容,我现在正努力到达最终感觉如此接近,因为我在调试时有指针引用。
如果有人能够理解上述内容并提供任何有用的帮助,我们将非常感激。