此问题是对上一个问题的跟进(here)。
我从第三方供应商那里获得了一个在Visual Basic中创建的DLL( Sensor DLL.dll )。这个DLL包含与传感器通信的函数,我需要从我正在编写的Visual C ++程序中调用这些函数。供应商不会提供头文件,我不知道Visual Basic。
我有关于每个功能的少量文档。例如,我被告知DLL中的一个函数( Get_Data )具有以下形式:
Public Function Get_Data(ByVal Handle As String) As String
将返回一个值介于-16777216和+16777215之间的字符串。就是这样。
在上一个问题中,用户Hans Passant给出了这个有用的回复:
VB6 DLL通常是COM服务器。事实上,你确实有一个.h文件,它有一个嵌入的类型库。使用Project + Properties,Common Properties,Framework和References启动它。添加新参考按钮,浏览选项卡,选择DLL。
接下来,查看+对象浏览器。您应该在列表中看到生成的Interop库。打开节点,看看有什么。您编写正常的托管代码(如gcnew)来创建COM对象并调用接口方法。您确实需要一些关于可用方法的最低限度文档来猜测它们应该如何被调用。 的
遵循这个建议我确实在对象浏览器中看到了DLL中的函数列表,包括Get_Data(System::String)
但是我对使用COM对象感到困惑,这超出了我的经验。
我已经尝试过简单地调用Get_Data(Handle);
,其中Handle
是一个BSTR,因为我已经添加了对我的项目的引用,但它无法识别。我也尝试先拨打CoInitialize
,但这没有用。
有人能告诉我现在需要写什么来调用这个函数吗?谢谢!
答案 0 :(得分:1)
如果我正确理解您的情况,您至少在VB6 .dll中实现了一个COM对象。要使用此对象,必须在调用GetData方法之前创建COM对象的实例。 CoInitialize仅初始化COM系统。您还必须使用CoCreateInstance等API。