C 呼叫c 寫的dll不成功原因

2021-08-02 05:55:51 字數 980 閱讀 3893

今天想在vs2010下使用c#的winform呼叫,vs2010編寫的c++動態鏈結庫dll,但是總是提示找不到入口函式。呼叫方法如下:

[dllimport("examsafe.dll"]

public static extern long poplanguagebar(ref long result);

該函式的功能是彈出輸入法提示欄。

poplanguagebar在c++ 中是乙個虛函式 ,需要重寫,開始以為是虛函式的問題,後來各種查資料得出的結論不是這個原因。

那麼就應該是在c++裡面的匯出標識c#不認。

檢視c++標頭檔案裡面的函式定義如下:

stdmethod(poplanguagebar)(long* result);

stdmethod 展開就是 virtual __declspec(nothrow) long __stdcall 

那麼這種匯出標識肯定有一環是c#不識別的。

通過各種修改,各種嘗試後,果斷放棄在類裡面去修改匯出標識,乾脆重新寫了乙個純c函式

函式定義如下

extern "c" __declspec(dllexport) long poplanguagebar(long* result){}

並用在c#中匯入時,需要新增引數callingconvention = callingconvention.cdecl

具體匯入格式是

[dllimport("examsafe.dll", charset = charset.auto, callingconvention = callingconvention.cdecl)]

public static extern long poplanguagebar(ref long result);

直接搞定收工。

其中原因是在vs2010下,要想呼叫c++所寫的dll ,還需要在c++中將函式宣告為extern "c" __declspec(dllexport)格式,c# 才能識別。弄了半個下午。。。。

windows安裝IIS不成功的原因

一 背景 之前做過一段時間的實施,因此總結一下iis安裝不成功會有哪些原因導致的,希望給踩坑的人提供思路和幫助。二 分析原因 1.系統問題,比如windows家庭版本 獨白 我之前花了一天的時間安裝iis,都不成功,當時奔潰了,最後在朋友指導發現win10的家庭版本的系統導致原因,當時我的內心噴一口...

C 呼叫C 寫的DLL

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

C 呼叫Delphi寫的DLL

在c 中可以這樣呼叫 呼叫 這裡需要注意的是要外傳的pchar型別引數,在c 中對應使用stringbuilder,如果使用string沒有任何資訊傳出,如果使用ref string形式,則會出現記憶體錯誤。在c 中可以這樣呼叫 呼叫 經過測試 delphi中integer的引數使用c 中的int即...