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呢?

解决方案 »

  1.   

    看看我这个博客 https://blog.csdn.net/supermanking/article/details/5347763
      

  2.   

    帅哥我还是有点不明白,这个是C#写的,如何在Vb下调用呢,有具体步骤吗?
      

  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和整数类型对接,大致如此,具体你还得多用用就清楚了。
      

  4.   

    大神,看你写的我确实明白了很多,非常感谢。
    但是我有一点不明白的是如上C#  a.getsnfrommac这个函数我如何带到vb下来呢?
      

  5.   

    大神看你写的,我确实懂了很多。但是我脑子可能还有点不好使。我是不懂C# 我如何把如上a.getsnfrommac带到VB下来呢?