-1

我正在尝试将 C++ 项目 Dll 导入 C# 项目。我发现很多人都在谈论使用 DllImport。我尝试使用它,这就是我所拥有的-

CPP代码:

int __declspec(dllexport) beginCode(double reportId);

C#代码:

[DllImport("C:\\Users\\<my_user_id>\\Desktop\\ctxmix\\Release\\ctxmix.dll",CallingConvention =CallingConvention.Cdecl ,CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int beginCode(double reportId);
int result = beginCode(reportId);

但是当我运行时,我得到一个异常 - 抛出异常:

System.DllNotFoundException

除了我在顶部的代码之外,我是否必须在项目中添加 CPP Dll 的任何引用或做其他任何事情?

编辑:我正在尝试使用 VS2015 运行我的 .exe,但我在本地机器上遇到了这个异常。此外,我在 Project->References 部分中看不到我的 CPP Dll,因为我在那里看到了其他引用。

4

1 回答 1

0

非托管 DLL 需要可被您的托管进程定位。通常这意味着将 DLL 与可执行文件放在同一目录中。但是您使用了一条绝对路径,我认为您已正确转录。

如果找不到 DLL 的依赖项,您也可能会遇到此错误。这似乎是这里可能的解释。很可能在加载 DLL 时找不到 MSVC 运行时。

使用绝对路径不是一个好主意。当您分发到另一台机器时,这将崩溃。仅使用 DLL 文件名并将其放在与可执行文件相同的目录中。

您的 DllImport 属性似乎很繁琐。没有文本时没有必要指定 CharSet。我怀疑你的函数调用 SetLastError。你真的需要 ExactSpelling 吗?

于 2016-08-05T20:50:07.640 回答