我在 DLLImport 中使用的引用中看不到 Dll

I don't see the Dll in references which is used in DLLImport

本文关键字:引用 看不到 Dll DLLImport 我在      更新时间:2023-10-16

我刚刚获得了第三方源代码,它基本上是另一个C 库的包装器项目:

我在此看到的代码如下:

[DllImport("QMSL_MSVC10D.dll", SetLastError = true, CallingConvention=CallingConvention.Cdecl)]
        static extern byte QLIB_SendSync( uint hResourceContext, 
                short requestSize,
                byte [] requestBytes,
                ref short responseSize,
                byte [] responseBytes,
                ulong timeout       
                );

有趣的是,我在参考文件夹中没有看到" qmsl_msvc10d.dll"。他们说,它是动态加载的,但我在任何文件夹或参考列表中都看不到qmsl_msvc10d.dll。当我调试代码时,它会出现错误:

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

当我告诉他们这是正在发生的事情时,他们告诉我它是动态的。我是否缺少什么?

参考列表仅包含其他.NET组件您的程序引用和使用或com对象,但是您调用DllImport的任何非管理代码从未在此处列出。正如供应商所说,它是按需动态加载的,并且不暗示编译时间参考,这就是为什么您看不到那里的原因。

但是,这并不意味着您在运行时不需要.dll本身。该文件必须在您的程序进行P/Indoke'D函数上的第一个调用时访问。查看您获得源的位置,他们必须为该第三方库提供它(否则代码是没有用的)。典型的做法是将DLL与Main .EXE一起放在一起,以便系统可以轻松找到它们。

如果将DLL添加到项目中(不是作为参考,而是作为"现有文件"),则可以将其Copy to output directory设置为Copy always,以便您始终在编译中可用。