[英]C# importing C++ dll
我有一个托管 dll 文件,它将函数从 C++ dll 导入托管环境。 我在我的程序中使用了它的一些功能,但问题是,当我使用它时出现这个错误:
无法加载 DLL 'Libraries\lib.dll':找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)
我将 .dll 文件放在程序目录和 system32 文件夹中。 但是,它仍然不起作用。 我想我必须使用 DLLImport 但我不知道如何使用它.. 即使看了一些例子我仍然感到困惑。 有人可以在这里帮助我吗?
你说:
我将 .dll 文件放在程序的目录中...
但:
无法加载 DLL 'Libraries\lib.dll'
我们需要查看您的DLLImport
属性创建,即本机方法的 C# 签名。 在我看来,您可能指定了路径,即
[DllImport( "Libraries\lib.dll" )];
static extern void MyNativeMethod();
尝试改用这个:
[DllImport( "lib.dll" )];
static extern void MyNativeMethod();
这将搜索运行目录以及您的PATH
环境变量。 如果您像以前一样指定文件路径,老实说,如果找不到文件,我真的不知道它是否会通过PATH
搜索(我在docs中找不到提及它)。
这里没有足够的信息来提供帮助,因为您没有显示您尝试导入的 API(在本机代码中)等。
话虽如此,我强烈建议阅读Platform Invoke Tutorial以及A Closer Look at Platform Invoke on MSDN。 他们介绍了主要问题,并展示了许多如何从 C++ DLL 导入和使用函数的示例。
在 c# 中使用 c++ dll 文件的最佳和最简单的方法:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace demo1
{
class Program
{
[DllImport("shi.dll", EntryPoint = "?HelloWorld@@YAXXZ")]
public static extern int HelloWorld();
public static void Main(string[] args)
{
//Console.WriteLine(StringUtilities.HelloWorld());
Console.WriteLine(HelloWorld());
// public static extern void HelloWorld();
// HelloWorld();
// Console.ReadKey();
}
}
}
我在使用不同的 .dll 文件时遇到了同样的问题,解决方案是将目标更改为 x64 而不是 x86
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.