.net 調用C++ dll


.net C#調用C++ dll 主要分為以下的步驟

1、加載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);

2、調用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);
}

 

遇到的問題

1、調用dll時報:無法加載*.dll,找不到指定的模塊

    這個主要有以下兩個原因

    a、是因為對應的dll中有依賴於別的dll,用【depends】這個程式打開dll看有哪些依賴dll沒有於當前dll放到同一個目錄下,下載指定的dll到當前目錄下即可

    b、dll依賴的dll所在的路徑沒有放到環境變量中,把依賴dll放到環境變量中此錯誤就會解決

2、控制台程序和winform程序調用dll都能夠正確返回內容,便是webform或webservice調用dll就會報錯:未處理System.StackOverflowException

    這個目前了解到的原因是控制台程序和winform中單線程調用,而webform或webservice是多線程調用,可能是這方面出現的問題,以下是兩個臨時解決方案

    1、寫一個控制台程序調用dll,然后weborm調用這個控制台程序獲得返回結果

    2、把webform的請求寫入數據庫或隊列中,然后寫一個服務自動去輪詢數據庫或隊列進行處理

2、vs調試時調用正常,便是發布到IIS后調用失敗,說找不到指定的模塊:無法加載*.dll,找不到指定的模塊

    這個問題主要是因為調用的dll所依賴的dll所在路徑配置的環境變量是用戶環境變量而不是系統環境變理,把環境變量配置到系統環境變量后問題解決

    原因是IIS使用戶調取不到用戶環境變量,只能調取到系統環境變量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM