Com 在C++;,第二部分

Com 在C++;,第二部分,com,vb6,c++-cli,Com,Vb6,C++ Cli,此问题是上一个问题()的后续问题 我从第三方供应商处获得了一个用Visual Basic创建的DLL(传感器DLL.DLL)。此DLL包含用于与传感器交谈的函数,并且我需要从我正在编写的Visual C++程序中调用这些函数。供应商不会提供头文件,我也不知道Visual Basic 我有关于每个函数的少量文档。例如,我被告知DLL中的一个函数(Get_Data)的形式如下: Public Function Get_Data(ByVal Handle As String) As String 它

此问题是上一个问题()的后续问题

我从第三方供应商处获得了一个用Visual Basic创建的DLL(传感器DLL.DLL)。此DLL包含用于与传感器交谈的函数,并且我需要从我正在编写的Visual C++程序中调用这些函数。供应商不会提供头文件,我也不知道Visual Basic

我有关于每个函数的少量文档。例如,我被告知DLL中的一个函数(Get_Data)的形式如下:

Public Function Get_Data(ByVal Handle As String) As String
它将返回一个值介于-16777216和+16777215之间的字符串。仅此而已

在上一个问题中,用户给出了以下有用的回答:

VB6 DLL通常是COM服务器。实际上,您有一个与.h文件相当的文件,其中嵌入了一个类型库。从项目+属性、公共属性、框架和引用开始。添加新引用按钮,浏览选项卡,选择DLL

接下来,查看+对象浏览器。您应该在列表中看到生成的互操作库。打开节点以查看存在的内容。您可以编写普通的托管代码(如gcnew)来创建COM对象并调用接口方法。您确实需要一些关于可用方法的最低限度的文档来猜测应该如何调用它们。

按照这个建议,我确实在对象浏览器中看到了DLL中的函数列表,包括
Get_Data(System::String)
,但是我对使用COM对象感到困惑,这超出了我的经验

我试着简单地调用
Get_Data(Handle)
where
Handle
是一个BSTR,因为我已经将引用添加到了我的项目中,但它没有被识别。我还试着先调用
CoInitialize
,但没有用


有人能具体告诉我现在需要写什么来调用函数吗?谢谢

如果我正确理解您的情况,您至少在VB6.dll中实现了一个COM对象。要使用此对象,必须在调用方法GetData之前创建COM对象的实例。CoInitialize将仅初始化COM系统。您还必须使用类似CoCreateInstance的API。

如果原始版本是
typedef PVOID Handle
那么您应该传入
System.IntPtr
。除此之外,我可以重复汉斯说过的话:你没有提供足够的信息让我们提供帮助。您甚至还没有说实际的错误消息是什么。