dll的編寫,首先是開啟vs新建乙個c++的控制台程式,下一步後選擇dll以及空文件即可。然後就是新增乙個類新增乙個方法。方法排頭固定格式 extern"c"__declspec(dllexpowww.cppcns.comrt) 後面加方法即可。 例如如下**:
c++putfbklrkdll**:
複製** **如下:
extern"c"__declspec(dllexport) char* showimages(byte img,int w,int h)
c#呼叫dll基本也是固定格式,如下樣式,這邊有新增unsafe這是因為有用到指標的緣故[沒用指標不需要unsafe],c#用指標必須新增
unsafe,並且在專案屬性裡面的生成允許不安全**打鉤才行.
還有一點是c#呼叫dll需要新增命名空間
複製** **如下:
using system.runtime.interopservices;
**樣式如下:
c#呼叫**:
複製** **如下:
[dllimport("dll名字.dll", charset = charset.auto, callingconvention = callingconvention.cdecl)]
unsafe public static extern byte* showimages(byte src, int w, int h);
按照如上編寫dll以及呼叫失敗原因多數可能就是c++的c#的資料型別沒有對應的原因。
最後還有一點要提的是,具有指標返回值的方法,該指標變數在c++中必須是全域性的,方法體裡的私有的會出錯。原因是出了方法體就被釋放了,雖然是return出來的,也沒有效果。
這個問題我之前就遇到過, c++裡面return出來乙個指標位址,然後c#裡面呼叫,出來的資料亂七八糟,當時一直很鬱悶,後來終於發現原因就是指標return出來還是會被釋放掉,所以獲得的資料亂七八糟。解決方法當然是把指標變數設成全域性變數。
本文標題: c# 呼叫c++寫的dll的實現方法
本文位址: /ruanjian/csharp/100251.html
C 呼叫C 寫的DLL
方法有不少,這裡記錄其中的乙個方法。編譯 呼叫通過了的。期間遇到的問題是c 呼叫時傳遞string型別的引數和返回值會報錯。targetinvocationexception異常,值不在範圍內,記憶體不可訪問等等。解決方法是 在c 的dll中將string型別的引數返回值改為lptstr型別。在c ...
C 呼叫C 的DLL實現方法
具體的實現步驟如下 一 建立c dll,需要指定應用型別為 類庫 namespace cslib set 二 c 客戶程式,是個控制台應用,using debug cslib.dll using namespace cslib int tmain int argc,tchar argv 三 這裡有幾...
C 呼叫Delphi寫的DLL
在c 中可以這樣呼叫 呼叫 這裡需要注意的是要外傳的pchar型別引數,在c 中對應使用stringbuilder,如果使用string沒有任何資訊傳出,如果使用ref string形式,則會出現記憶體錯誤。在c 中可以這樣呼叫 呼叫 經過測試 delphi中integer的引數使用c 中的int即...