.net 調用C++ dll

.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使用戶調取不到用戶環境變量,只能調取到系統環境變量

相關文章
相關標籤/搜索