请问大神VB6如何调用C++写的DLL

weixin_38839399 2019-07-15 03:48:56
vSkysoft.ADSYS.HTTelecontrollerControl a = new vSkysoft.ADSYS.HTTelecontrollerControl();
string message = null;
string HT_SN = null;
string DSN = null;
List<string>SNDatas = null;
bool flag = false;
a.GetSNFromMac("08EB29F43D79", ref HT_SN, ref DSN);
flag = a.CheckSerialNumberStatus(HT_SN , out message, out SNDatas);
Thread.Sleep(0);

请问大神VB下如何调用C++写的DLL呢?
...全文
380 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38839399 2019-07-17
  • 打赏
  • 举报
回复
引用 3 楼 现在还是人类 的回复:
不知道你是不熟悉C语言还是VB,还是动态库和API的理念,但就VB来说,调用动态链接库很简单的,声明一下API函数就能用了。 声明动态库的函数,声明API函数可以是全局的,也可以是局部模块的,如果你想声明全局可用的API函数,你可以新建一个模块,然后在模块里用 Public Declare 声明函数,如果你只想某个类或窗口使用这个API函数,那么你就在那个窗口或类文件的顶部用 Private Declare 声明函数,声明规则很简单。如果你的API函数有返回值,那么用 Function 声明,如果没返回值,用Sub声明,后面跟着函数名注(意大小写一致),然后用 Lib "动态库文件名或完整路径" 指定动态库文件,然后就是声明参数,如果有返回,加 AS 返回类型就可以了。 例如编写了一个名为 myapi.dll 的动态链接库,里面有两个API函数,C语言原型为: void _stdcall TestMy001(BSTR in_string); long _stdcall TestMy002(BYTE *in_buff,BYTE **out_buff); 然后在VB里可以这样声明这两个函数: Public Declare Sub TestMy001 Lib "myapi.dll" (ByVal in_string As String) Public Declare Function TestMy001 Lib "myapi.dll" (ByRef in_buff As Any,ByRef out_buff As Any) As Long 如果要确保VB编译的程序能使用该API函数,那么在安装程序时可以把DLL复制到 Windows的System32目录中,也可以放到与可执行文件相同的路径下使用。不然你就得指定完整路径来使用,如:... Lib "c:\dll\myapi.dll" ... 至于参数的类型对接,一般VC用BSTR对接VB的String类型,C语言的指针数组类型VB用ByRef 和 Any 对接,如果是整数类型,VB用ByVal和整数类型对接,如果带指针的整数类型,VB用ByRef和整数类型对接,大致如此,具体你还得多用用就清楚了。
大神看你写的,我确实懂了很多。但是我脑子可能还有点不好使。我是不懂C# 我如何把如上a.getsnfrommac带到VB下来呢?
weixin_38839399 2019-07-17
  • 打赏
  • 举报
回复
大神,看你写的我确实明白了很多,非常感谢。 但是我有一点不明白的是如上C# a.getsnfrommac这个函数我如何带到vb下来呢?
现在还是人类 2019-07-16
  • 打赏
  • 举报
回复
不知道你是不熟悉C语言还是VB,还是动态库和API的理念,但就VB来说,调用动态链接库很简单的,声明一下API函数就能用了。 声明动态库的函数,声明API函数可以是全局的,也可以是局部模块的,如果你想声明全局可用的API函数,你可以新建一个模块,然后在模块里用 Public Declare 声明函数,如果你只想某个类或窗口使用这个API函数,那么你就在那个窗口或类文件的顶部用 Private Declare 声明函数,声明规则很简单。如果你的API函数有返回值,那么用 Function 声明,如果没返回值,用Sub声明,后面跟着函数名注(意大小写一致),然后用 Lib "动态库文件名或完整路径" 指定动态库文件,然后就是声明参数,如果有返回,加 AS 返回类型就可以了。 例如编写了一个名为 myapi.dll 的动态链接库,里面有两个API函数,C语言原型为: void _stdcall TestMy001(BSTR in_string); long _stdcall TestMy002(BYTE *in_buff,BYTE **out_buff); 然后在VB里可以这样声明这两个函数: Public Declare Sub TestMy001 Lib "myapi.dll" (ByVal in_string As String) Public Declare Function TestMy001 Lib "myapi.dll" (ByRef in_buff As Any,ByRef out_buff As Any) As Long 如果要确保VB编译的程序能使用该API函数,那么在安装程序时可以把DLL复制到 Windows的System32目录中,也可以放到与可执行文件相同的路径下使用。不然你就得指定完整路径来使用,如:... Lib "c:\dll\myapi.dll" ... 至于参数的类型对接,一般VC用BSTR对接VB的String类型,C语言的指针数组类型VB用ByRef 和 Any 对接,如果是整数类型,VB用ByVal和整数类型对接,如果带指针的整数类型,VB用ByRef和整数类型对接,大致如此,具体你还得多用用就清楚了。
weixin_38839399 2019-07-16
  • 打赏
  • 举报
回复
引用 1 楼 现在还是人类 的回复:
看看我这个博客 https://blog.csdn.net/supermanking/article/details/5347763
帅哥我还是有点不明白,这个是C#写的,如何在Vb下调用呢,有具体步骤吗?
现在还是人类 2019-07-15
  • 打赏
  • 举报
回复

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧