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呢?
uj5u.com熱心網友回復:
看看我這個博客 https://blog.csdn.net/supermanking/article/details/5347763uj5u.com熱心網友回復:
帥哥我還是有點不明白,這個是C#寫的,如何在Vb下呼叫呢,有具體步驟嗎?uj5u.com熱心網友回復:
不知道你是不熟悉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和整數型別對接,大致如此,具體你還得多用用就清楚了。
uj5u.com熱心網友回復:
大神,看你寫的我確實明白了很多,非常感謝。但是我有一點不明白的是如上C# a.getsnfrommac這個函式我如何帶到vb下來呢?
uj5u.com熱心網友回復:
大神看你寫的,我確實懂了很多。但是我腦子可能還有點不好使。我是不懂C# 我如何把如上a.getsnfrommac帶到VB下來呢?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/28673.html
標籤:VBA
