即使文件位于Bin文件夹中,DLLImport也无法正常工作

时间:2014-01-30 21:10:32

标签: c# .net com dllimport

我正在使用在其代码中使用DLLImport的第三方应用程序。他们正在使用的COM DLl,他们分别给了我。

我确实将该文件放在第三方源代码的Bin / Debug文件夹中并重新编译代码。

执行此操作后,我发现无法在我的应用程序上加载模块错误。任何想法为什么会这样?

抛出以下错误:

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

我确实在其中运行了依赖性walker,我看到了以下错误:

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中看到的错误之间是否存在任何相关关系的可能性有多大?

4 个答案:

答案 0 :(得分:4)

除了“未找到DLL”之外,该错误消息还可能意味着未找到DLL的依赖项之一,DLL或其依赖项之一具有与主机应用程序不同的体系结构,或初始化函数{{ 1}}返回了失败代码。

使用进程监视器来监视文件活动,并检查是否打开DLL文件(可能是DllImport中列出的文件但也可能是依赖项)失败

基于DLL的文件名,听起来好像它是针对C ++库的Debug版本构建的。不允许分发运行时库的Debug版本;你的源代码需要为你提供一个针对运行时库的发布版本构建的DLL(可以在他们的DLL中启用调试,但是他们不能使用调试运行时)。

答案 1 :(得分:1)

如果这是COM DLL,则需要将其注册为“regsvr32 name.dll”。在命令提示符下键入它,然后按“Enter”。将“name.dll”替换为您拥有的那个。

如果DLL必须是GAC的一部分而不是bin文件夹,也会发生此错误。

答案 2 :(得分:0)

DllImport只有在public class中使用时以及使用以下namespaces时才有效:

using System;

using System.Runtime;

using System.Runtime.InteropServices;

答案 3 :(得分:0)

[DllImport(“ DLL_NAME”)]

和代码:

    if (!Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process).Contains(HttpRuntime.BinDirectory))
        Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process) + ";" + HttpRuntime.BinDirectory, EnvironmentVariableTarget.Process);