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呢?
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呢?
声明动态库的函数,声明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下来呢?