C# 导入 C dll

新手上路,请多包涵

我有一个托管 dll 文件,它将函数从 C++ dll 导入托管环境。我在我的程序中使用了它的一些功能,但问题是,当我使用它时出现这个错误:

无法加载 DLL ‘Libraries\lib.dll’:找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)

我将 .dll 文件放在程序目录和 system32 文件夹中。但是,它仍然不起作用。我想我必须使用 DLLImport 但我不知道如何使用它.. 即使看了一些例子我仍然感到困惑。有人可以在这里帮助我吗?

原文由 dnclem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 700
2 个回答

你说:

我将 .dll 文件放在程序的目录中…

但:

无法加载 DLL ‘Libraries\lib.dll’

我们需要看到你的 DLLImport 属性创建,即native方法的C#签名。在我看来,您可能指定了路径,即

[DllImport( "Libraries\lib.dll" )];
static extern void MyNativeMethod();

尝试改用这个:

 [DllImport( "lib.dll" )];
static extern void MyNativeMethod();

这将搜索运行目录以及您的 PATH 环境变量。如果您像您一样指定文件路径,老实说,如果找不到文件(我在 文档 中找不到提及),我真的不知道它是否会搜索 PATH

原文由 Ed S. 发布,翻译遵循 CC BY-SA 4.0 许可协议

这里没有足够的信息来提供帮助,因为您没有显示您尝试导入的 API(在本机代码中)等。

话虽如此,我强烈建议阅读 Platform Invoke Tutorial 以及 A Closer Look at Platform Invoke on MSDN。他们介绍了主要问题,并展示了许多如何从 C++ DLL 导入和使用函数的示例。

原文由 Reed Copsey 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题