2

我在我的 VB .Net 程序中添加了 VC++ 库,例如:

<DllImport("KMpeg4.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Shared Function KOpenInterface() As System.IntPtr
End Function

我在运行时遇到错误:

无法加载 DLL 'KMpeg4.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

我已经把这个库放在任何地方,包括system32,仍然没有运气,这意味着它缺少依赖库KMpeg4.dll

所以我运行了 Dependency walker,它给了我丢失的库:

API-MS-WIN-CORE-COM-L1-1-0.DLL  
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL  
API-MS-WIN-CORE-WINRT-L1-1-0.DLL  
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL  
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL  
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL  
DCOMP.DLL
GPSVC.DLL  
IESHIMS.DLL

以及不良的链接功能:

c:\windows\system32\API-MS-WIN-CORE-THREADPOOL-L1-1-0.DLL
c:\windows\system32\OLE32.DLL
c:\windows\system32\DWMAPI.DLL
c:\windows\system32\IEFRAME.DLL
c:\windows\system32\IMM32.DLL
c:\windows\system32\MFPLAT.DLL
c:\windows\system32\NDFAPI.DLL
c:\windows\system32\USERENV.DLL
c:\windows\system32\UXTHEME.DLL

依赖walker给出以下错误:

警告:至少没有找到一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。

我已经安装了 Microsoft VC++ 2005,2008,2010 x86 和 x64 以及 .Net framework 4。

我也尝试使用 sysinternal 进程监视器查看弹出窗口,但在程序收到错误异常之前KMpeg4.dll它没有加载KMpeg4.dll

这些库可能来自哪个包的任何想法?

或者,如何解决这个问题?

4

1 回答 1

2

Dependency Walker 对诊断这个问题没有用,像这样的 DLL 只能在运行时找到。复制到 system32 通常是大锤解决方案。除了在 64 位版本的 Windows 上,您的项目的平台目标设置为 x86,在这种情况下很可能因为这肯定是一个 32 位 DLL,然后您需要将其敲入 c:\windows\syswow64。

但不要那样做,您只需要确保 DLL 与项目的 EXE 位于同一目录中。最好的方法:

  • 右键单击您的 EXE 项目,添加 + 现有项目
  • 导航到您的 KMpeg4.dll 副本并选择它
  • 选择添加的项目,将 Copy to Output Directory 属性设置为“Copy if newer”

重建,您现在将在正确的位置获得 DLL 的副本。不要忘记将它与项目的可执行文件一起部署,并且不要忘记它可能需要在用户机器上的运行时支持 DLL。

于 2013-09-26T14:03:53.700 回答