加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

com – 在C中调用Visual Basic DLL,第2部分

发布时间:2020-12-16 06:54:45 所属栏目:百科 来源:网络整理
导读:这个问题是对前一个问题( here)的跟进. 我已经从第三方供应商(Sensor DLL.dll)获得了在Visual Basic中创建的DLL.这个DLL包含与传感器通信的函数,我需要从我正在编写的Visual C程序中调用这些函数.供应商不会提供头文件,我不知道Visual Basic. 我有关于每个功
这个问题是对前一个问题( here)的跟进.

我已经从第三方供应商(Sensor DLL.dll)获得了在Visual Basic中创建的DLL.这个DLL包含与传感器通信的函数,我需要从我正在编写的Visual C程序中调用这些函数.供应商不会提供头文件,我不知道Visual Basic.

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

Public Function Get_Data(ByVal Handle As String) As String

这将返回一个值介于-16777216和16777215之间的字符串.这就是全部.

在上一个问题中,用户Hans Passant给出了这个有用的答复:

A VB6 DLL is normally a COM server. You do in fact have the equivalent of a .h file,it has a type library embedded in it. Start this off with Project + Properties,Common Properties,Framework and References. Add New Reference button,Browse tab,select the DLL.

Next,View + Object Browser. You should see the generated Interop library in the list. Open the node to see what is there. You write normal managed code,like gcnew,to create the COM object and call the interface methods. You do need some minimum documentation on the available methods to have a guess at how they should be called.

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

我试过简单地调用Get_Data(Handle);现在Handle是一个BSTR,我已经添加了对我的项目的引用,但它没有被识别.我也尝试先调用CoInitialize,但这没有用.

任何人都可以具体告诉我现在需要写什么来调用函数吗?谢谢!

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读