c 呼叫C dll 的方法

2021-07-16 13:51:10 字數 2195 閱讀 8557

c#呼叫c++ dll 的方法:

1.新增 using system.runtime.interopservices;

2.將dll 放到執行程式的根目錄下

3.c++中可識別的字元為:utf8,在傳輸字元的時候,需要先轉換為utf8,然後再傳輸,要不然中文會識別不了,同樣在返回資料的時候,也需要將utf8轉換為default格式,否則中文為亂碼

4.載入的時候判斷一下,只需要載入一次就可以,第二次直接傳送資料即可

5.如果中途有斷掉連線,則需要關閉連線,重新載入即可

核心**如下:

using system;

using system.collections.generic;

using system.text;

using system.runtime.interopservices;

namespace csharpdemo

/// /// 連線websocket

///

public static void websocket()

";byte b = system.text.encoding.utf8.getbytes(str);

//用於介面返回

int res = -1;

//intptr hlib;

//以下動態載入dll庫

if (hlib == intptr.zero) //判斷是否是第一次載入

intptr hapi = getprocaddress(hlib, "initprintermanager");

if (hapi == intptr.zero)

//將初始化函式指標封裝成委託,並呼叫

initprintermanager initprintermanager =

(initprintermanager)marshal.getdelegateforfunctionpointer(hapi, typeof(initprintermanager));

res = initprintermanager();

if (res != 0)

intptr hapi2 = getprocaddress(hlib, "setrecvdatacallback");

if (hapi2 == intptr.zero)

setrecvdatacallback setrecvdatacallback =

(setrecvdatacallback)marshal.getdelegateforfunctionpointer(hapi2, typeof(setrecvdatacallback));

//setrecvdatacallback(onmessage);

//setrecvdatacallback(null);

callback = new writetoconsolecallback(onmessage);

setrecvdatacallback(callback);

intptr hapi3 = getprocaddress(hlib, "sendmessage");

if (hapi3 == intptr.zero)

sendmessage =

(sendmessage)marshal.getdelegateforfunctionpointer(hapi3, typeof(sendmessage));

res = sendmessage(b);

if (res != 0)

system.threading.thread.sleep(1000);

}else

system.threading.thread.sleep(1000);}}

catch (exception ex)

}/// /// 關閉連線函式

///

public void close()

closeprintermanager closeprintermanager =

(closeprintermanager)marshal.getdelegateforfunctionpointer(hapi4, typeof(closeprintermanager));

res = closeprintermanager();

if (res != 0)

//釋放動態鏈結庫

freelibrary(hlib);}}

}

C 呼叫C dll方法步驟

c 呼叫c dll的方法和步驟 其他分享涉及到的概念和方法對於像我這樣比較菜的選手看起來比較費勁並且很難抓住重點,這裡我總結了一段時間的研究成果供初學者救濟之用,簡單明瞭。程式設計客棧 1 新建專案 visual c win32專案 mydll 注意 c 編寫的dll一般是不能直接拿來c 呼叫,需要...

編寫C 呼叫的C DLL

最近一段時間,經常遇到這些問題,前一陣子研究了一下,沒有記下來,沒想到最近研究又有些不記得了,今天把它寫下來以備忘。一般我們提供給其他語言呼叫的dll,都是用c或者c 編寫,然後封裝。我這邊也是採用的c 首先有幾個注意點 1 如果功能很簡單,或者不使用第三方庫 如mfc自帶的庫 建立乙個win32的...

C 呼叫C DLL的方式

動態鏈結庫 dll 是乙個包含可由多個程式同時使用的 和資料的庫,dll不是可執行檔案。可以說在windows作業系統中隨處可見,開啟主分割槽盤下的system32。在一些專案中,如果有大量運算或者涉及大量演算法時通常使用c或c 語言封裝成乙個dll,開放一些介面供其他程式呼叫。下面是寫的乙個簡單的...