c#程式呼叫c++的dll的時候,經常出現這樣的問題:
之前也遇到過這個問題,可是怎麼解決的就忘記了,這次遇到了,就寫下這個問題的原因。
這個是我在網上查資料找到的:
原因就是:c++源**中的函式在編譯成dll後,函式的名稱就發生了改變:會在函式的前後產生一些字元。
我們能通過exescope軟體來檢視c++編譯後的函式名稱是什麼,這裡要提下,exescope中文版本無法在x64的環境下使用,最好下英文版本。
例如:c++中的函式名是getsvssize,編譯後變成?getsvssize@@ya_npa_wpaj11111paf@z,這個時候,我們要是想呼叫這個函式,那麼應該這樣寫:
我的問題就解決了,然後我就開始想這個問題:c++在編譯之後為什麼要加上這些字元呢? 難道這是防止被reflect?
在c#的**執行過程中,首先源**被編譯成託管模組(分布在各自的dll中),託管模組裡面包括il**、元資料、還有一些標誌(頭資訊),那元資料裡面記錄了源**中定義的各種型別和成員等資訊,所以c# reflect出來,裡面的類名,方法名都沒改變。
而c++由於非託管,無法reflect,那麼c++編譯後,是什麼樣的形式存在呢?《待續》
c sdl呼叫找不到入口點
首先是 總是提示你找不到 入口函式 新建個 console 工程,寫好 int main int argc,char argv 之後,死活 告訴你沒有入口 最後原因是因為 sdl 的標頭檔案裡 define main sdl main 做了這樣的 巨集定義後,main函式當然就找不到了。解決的辦法 ...
C 找不到DLL原因
未處理的 system.dllnotfoundexception 型別的異常出現在 x.dll 中。其他資訊 無法載入 dll test.dll 找不到指定的模組。異常來自 hresult 0x8007007e test.dll一定是存在的,並且已經拷貝到執行目錄下面,但是提示的錯誤卻是找不到,經過...
關於C 引用Dll後,找不到命名空間的問題
在引用裡明確新增了乙個dll,能夠看到該dll詳細資訊,可就是用using找不到命名空間。並且發現剛引用時是有該命名空間,一編譯就消失了。最後發現原因如下 原目標框架為.net framework 4 client profile後改成.net framework 4,編譯就正常了。看網上有介紹 c...