2014-01-30 83 views
1

我正在使用在其代碼中使用DLLImport的第三方應用程序。他們正在使用的COM DLl,他們分別給了我。即使該文件位於Bin文件夾中,DLLImport也不能正常工作

我確實將該文件放在第三方源代碼的Bin/Debug文件夾中,並重新編譯了代碼。

這樣做後,我看到無法加載我的應用程序模塊錯誤。任何想法,爲什麼它可能是這種情況?

它拋出以下錯誤:

Unable to load DLL 'QMSL_MSVC10D.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"} 

我沒有在它運行的依賴學步車,我看到下面的錯誤:

Error: At least one required implicit or forwarded dependency was not found. 
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module. 
Error: Modules with different CPU types were found. 
Warning: At least one delay-load dependency module was not found. 
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module. 

我的問題是,他們怎麼可能編譯DLL有這麼多錯誤?在Dependency Walker中,我看到的錯誤和我們看到的錯誤之間存在任何相關關係的可能性有多大?

+1

你可以爲我們提供錯誤信息?沒有它或一些其他的信息,這將是很難弄清楚這裏有什麼問題 – JaredPar

+0

我在上面添加了錯誤的詳細信息。 – TeaLeave

+1

該DLL必須配合您的代碼,而不是第三方源代碼。 dll的一點是它不會被編譯到第三方庫中。你必須把它放在一邊。將它添加到您的項目並使其成爲內容,如果更新則複製。 – tofutim

回答

4

除了「未找到DLL」,該錯誤消息還可能意味着未找到DLL的依賴項之一,該DLL或其某個依賴項具有與主機應用程序不同的體系結構,或者初始化函數DllMain返回了失敗代碼。

使用進程監視器來監視文件活動,並檢查是否有故障打開一個DLL文件(可在的DllImport可以在一個上市,但也可能是一個依賴)根據DLL的文件名

,聽起來好像它是針對C++庫的Debug版本構建的。不允許分發運行時庫的Debug版本;您的源代碼需要爲您提供一個針對發佈版運行時庫構建的DLL(可以在其DLL中啓用調試,但它們不能使用調試運行時)。

+1

他/她也可以使用[depends](http://www.dependencywalker.com/),我發現它是一個使用起來更簡單。 –

+1

@PatrickQuirk:我也喜歡Dependency Walker,但根據我的經驗,它會導致.NET應用程序出現更多問題(在分析需要實際獲取有用信息的選項時),而不是解決問題。也許更新的版本已經解決了這些問題。 –

1

如果這是COM DLL,則需要使用「regsvr32 name.dll」進行註冊。在命令提示符中鍵入它,然後按「Enter」。將「name.dll」替換爲您擁有該DLL的那個。

如果DLL必須是GAC的一部分而不是bin文件夾,也會出現此錯誤。

+2

如果它是一個COM DLL,他不會談論'DllImport'。他們是兩種不同的互操作方法。這個問題有點困惑。 –

+0

好的。這裏可能有一個混亂。我正在使用第三方.NET項目,它基本上是稱爲QMSL_MSVC10D.dll的C++應用程序的包裝。他們拼命給了我這個文件,現在我有加載它的問題。他們在.NET庫中的代碼如下所示:'[DllImport(qmslDllName,SetLastError = true,CallingConvention = CallingConvention.Cdecl)]' – TeaLeave

+0

據我所知,一個只將.NET程序集放入GAC。 –

0

DllImport作品只有當您在public class使用它並使用以下namespaces時:

using System;

using System.Runtime;

using System.Runtime.InteropServices;

相關問題