无法使用 DllImport 将 c++ dll 导入到 c# 项目
Unable to import c++ dll to c# project using DllImport
我正在尝试将 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,但我在本地计算机上遇到了这个异常。此外,我在项目-> 参考部分中没有看到我的 CPP Dll,因为我在那里看到了其他参考。
非托管 DLL 需要可由您的托管进程定位。通常这意味着将 DLL 放在与可执行文件相同的目录中。但是您使用了一条绝对路径,我认为您已正确转录。
如果无法找到 DLL 的依赖项,您也可能会遇到此错误。这似乎是这里可能的解释。加载 DLL 时,很可能找不到 MSVC 运行时。
使用绝对路径不是一个好主意。当您分发到另一台机器时,这将崩溃。仅使用 DLL 文件名并将其放在与可执行文件相同的目录中。
您的 DllImport 属性似乎很挑剔。没有文本时指定 CharSet 毫无意义。我怀疑你的函数调用 SetLastError。您真的需要 ExactSpelling 吗?
我正在尝试将 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,但我在本地计算机上遇到了这个异常。此外,我在项目-> 参考部分中没有看到我的 CPP Dll,因为我在那里看到了其他参考。
非托管 DLL 需要可由您的托管进程定位。通常这意味着将 DLL 放在与可执行文件相同的目录中。但是您使用了一条绝对路径,我认为您已正确转录。
如果无法找到 DLL 的依赖项,您也可能会遇到此错误。这似乎是这里可能的解释。加载 DLL 时,很可能找不到 MSVC 运行时。
使用绝对路径不是一个好主意。当您分发到另一台机器时,这将崩溃。仅使用 DLL 文件名并将其放在与可执行文件相同的目录中。
您的 DllImport 属性似乎很挑剔。没有文本时指定 CharSet 毫无意义。我怀疑你的函数调用 SetLastError。您真的需要 ExactSpelling 吗?