.net C#調用C++ dll 主要分爲如下的步驟web
一、加載dll數據庫
[DllImport("CallOtherLanguage.dll", EntryPoint = "create_prg", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern int create_prg(byte[] first_num, byte[] second_num);
二、調用dll多線程
public void CallOther() { string first = "this is a "; byte[] byteFirst = Encoding.UTF8.GetBytes(first); string second = "other"; byte[] byteSecond = Encoding.UTF8.GetBytes(second); int result = create_prg(byteFirst, byteSecond); Console.WriteLine(result); }
遇到的問題this
一、調用dll時報:沒法加載*.dll,找不到指定的模塊spa
這個主要有如下兩個緣由.net
a、是由於對應的dll中有依賴於別的dll,用【depends】這個程式打開dll看有哪些依賴dll沒有於當前dll放到同一個目錄下,下載指定的dll到當前目錄下便可線程
b、dll依賴的dll所在的路徑沒有放到環境變量中,把依賴dll放到環境變量中此錯誤就會解決調試
二、控制檯程序和winform程序調用dll都可以正確返回內容,即是webform或webservice調用dll就會報錯:未處理System.StackOverflowExceptioncode
這個目前瞭解到的緣由是控制檯程序和winform中單線程調用,而webform或webservice是多線程調用,多是這方面出現的問題,如下是兩個臨時解決方案orm
一、寫一個控制檯程序調用dll,而後weborm調用這個控制檯程序得到返回結果
二、把webform的請求寫入數據庫或隊列中,而後寫一個服務自動去輪詢數據庫或隊列進行處理
二、vs調試時調用正常,即是發佈到IIS後調用失敗,說找不到指定的模塊:沒法加載*.dll,找不到指定的模塊
這個問題主要是由於調用的dll所依賴的dll所在路徑配置的環境變量是用戶環境變量而不是系統環境變理,把環境變量配置到系統環境變量後問題解決
緣由是IIS使用戶調取不到用戶環境變量,只能調取到系統環境變量