C 呼叫C 的dll總結

2021-06-07 07:29:46 字數 1507 閱讀 3483

舉例:// netcontrol.cs

using system;

using system.collections.generic;

using system.text;

using system.runtime.interopservices; // 這句必不可少

namespace netcontrol }

1.dll函式的匯入:

關鍵字:unmanaged code ; managed code;

具體應用類:system.runtime.interopservices

具體使用方法:

[dllimport("muparser.dll", entrypoint = "mupsetexpr", setlasterror = true, charset = charset.ansi, exactspelling = true, callingconvention = callingconvention.stdcall)]

public static extern void mupsetexpr(void* parser_handle, stringbuilder a_szexpr);

注意點:entrypoint 同函式名 charset 注意 不要輕易使用 uncode.

函式引數 要使用指標時 應該使用 unsafe

2.函式指標的使用:

關鍵字:delegate

具體使用方法:

c++: typedef double (*fun_type1)(double);

c#:public delegate double fun_type1(double);

注意點:c#使用委託 方法,實現函式指標,使用時 c++中的指標去掉

引數定義很c++一樣

3.定義指標值

關鍵字:fixed

具體使用說明:主要是想返回指標位址,c#中好像不支援 &(可能不準確)

直接給指標賦值也不行

example:

public double* addvariable() }

說明:相關這個指標變數都要在 fixed 裡面

4.關於c++函式引數是 char* 的操作

關鍵字:stringbuider

具體使用說明:c++中引數char*操作是 乙個位元組乙個位元組讀取的,

c#中的string 是 兩個位元組讀取的 所以不能用

所以只用stringbuilder替代

現在還沒有找到更好的方法,如果有的話告之

5.關於dll的匯入

如果c++中dll 不是元件形式(或者com),那麼不能直接通過.net的reference 直接應用

我的解決方法:

應用平台:.net website

方法: 建立classlibrary 將要應用的dll放在bin下 然後編譯工程 使用新生成的dll 就可以了

6.關於c#中使用指標:

關鍵字:unsafe

使用方法:在需要使用指標的地方 加 unsafe

c 呼叫c 的dll 例項

一 使用 clr編譯mfc可執行檔案或規則c dll函式.1 開啟 專案屬性 對話方塊,方法是右鍵單擊 解決方案資源管理器 中的專案並選擇 屬性 2 展開 配置屬性 旁邊的節點並選擇 常規 在右側窗格中的 專案預設值 下,將 公共語言執行庫支援 設定為 公共語言執行庫支援 clr 3 在相同的窗格中...

C 呼叫C 寫的DLL

方法有不少,這裡記錄其中的乙個方法。編譯 呼叫通過了的。期間遇到的問題是c 呼叫時傳遞string型別的引數和返回值會報錯。targetinvocationexception異常,值不在範圍內,記憶體不可訪問等等。解決方法是 在c 的dll中將string型別的引數返回值改為lptstr型別。在c ...

C 呼叫C 生成的dll

本文將介紹c 中通過dll來呼叫c 首先建立c 的 類庫 工程cshapedll。然後輸入如下 csharp view plain copy c 通過dll呼叫c by morewindows using system using system.collections.generic using s...