簡體   English   中英

無法加載{dll}導入的過程

[英]A procedure imported by {dll} could not be loaded

我有幾個非托管C ++編寫的lib文件,它們需要鏈接到托管C ++ dll。
然后,我需要從C#應用程序調用此Managed C ++的函數。

第一步很好-創建了托管C ++ dll,我可以用ildasm看到它導出了我需要的功能。 但是,當我嘗試從用C#編寫的測試應用中調用此函數時,它說:

在未知模塊中發生了類型為'System.IO.FileLoadException'的未處理異常。
無法加載{MyManagedCPP.dll}導入的過程。

此消息來自VS2010。
我做了一個簡單的實驗-從Managed C ++ dll中的所有lib文件中刪除了依賴項,然后重新構建它。
進行此更改就可以了-應用程序啟動,我可以從C#測試應用程序調用Managed C ++ dll的功能。

當dll與lib文件具有靜態鏈接時,是否有可能通過設計調用托管c ++函數? 技術限制? 還是有一些解決方法?

謝謝

您無疑對本機DLL有隱式依賴。 從這個問題尚不清楚,可能是什么DLL。 例如,它可能是msvcrxx.dll,它是本機C ++代碼的運行時支持庫。 如果您不想混合使用CRT版本,那就太糟糕了。 否則,缺少的此類DLL會阻止C ++ / CLI程序集被加載,從而產生FileLoadException。

如果您不知道該DLL是什么,則可以使用SysInternals的ProcMon實用程序。 跟蹤將向您顯示該程序正在搜索DLL而找不到它。 如果它是msvcrxx.dll,那么請確保使用與構建C ++ / CLI程序集相同的編譯器版本來重建.lib文件。 如果還有其他問題,請確保將DLL復制到構建目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM