如何将 C/C++ dll 导入 .NET 应用程序

Posted

技术标签:

【中文标题】如何将 C/C++ dll 导入 .NET 应用程序【英文标题】:How to Import a C/C++ dll to .NET application 【发布时间】:2010-08-10 13:04:08 【问题描述】:

在我的新项目中,我想使用现有的 C C++ 函数。为此,我需要将 C/C++ dll 添加到 C# 项目中。

我的 C/C++ 项目属于 UnManaged 类型,它不是 COM 项目。我从 MSDN 看过几篇文章并尝试过:

[DllImport("user32.dll", EntryPoint="MessageBoxA")]

但我不确定应该将user32.dllmy.dll 放在哪里。我是否需要将我的 dll 放在 GAC 或其他物理文件夹中。

如果那将是一个物理文件夹,那么我不需要使用相对路径或绝对路径吗?

还阅读了几篇关于使用 InterOp 移植 C++ dll 的文章,但不太清楚如何开始。

【问题讨论】:

【参考方案1】:

请不要将您自己的 dll 放在 C:\Windows\system32 中。如果你要使用 Windows 的一部分,比如 user32.dll,你不要把它放在任何地方,它已经在那里并且会在运行时找到,因为 C:\Windows\system32 在路径上。如果您要使用自己的 DLL,请将其放在 bin 或 bin\Debug 或任何文件夹中,就在您的 exe 旁边。这很容易通过将其添加到项目中来完成,这样它就会在您构建时复制到输出目录中,但是您可以拥有一个 MSI 或其他任何东西。如果它被多个应用程序使用,您必须决定是希望它们在更新时都开始使用新应用程序,还是对现有副本感到满意。这可能是一个复杂的问题,你有足够的时间让它为一个应用程序工作,对吧?

对于入口点,它是 DLL 中函数的名称。如果您在托管代码中使用相同的名称,则可以将其省略。它允许您将可能会觉得复杂的 DLL 函数名称映射到您在托管代码中使用的更简单的名称。

【讨论】:

【参考方案2】:

您可以将它放在您的应用程序bin 文件夹中。

【讨论】:

以上是关于如何将 C/C++ dll 导入 .NET 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

C/C++:项目中的dll的构建和dll的导入函数并执行(VS2015)

C/C++:项目中的dll的构建和dll的导入函数并执行(VS2015)

处理来自 C++ DLL 的用户定义异常 - .NET PInvoke/Marshalling

跨进程加载的 DLL - 如何使某些操作“类似于单例”

从 C# .NET 应用程序调用 C/C++ 代码

调试时如何从 C# 应用程序步入 C/C++ DLL