从 c# 访问 C++ .lib 库
Posted
技术标签:
【中文标题】从 c# 访问 C++ .lib 库【英文标题】:Accessing a C++ .lib library from c# 【发布时间】:2011-05-06 18:54:13 【问题描述】:我有一个 c++ 库文件 (.lib)。如何从 C# 访问其中的函数?我读过我可以将库文件包装在 c++ dll 中并以这种方式公开函数。这是唯一的方法吗?我不是代码的所有者,所以我的选择有限。
【问题讨论】:
【参考方案1】:使用 C++/CLI 程序集包装 C++ 库。
C++/CLI 允许您混合托管和非托管代码,充当 C# 和本机 C++ 之间的桥梁。它实际上非常简单且相对容易做到,尽管如果你有很多类/函数要包装,它会变得乏味。
Here 就是一个例子。
【讨论】:
谢谢。这是我将使用的方法,因为我无法修改原始 c++ 库。【参考方案2】:您不能直接访问 c++ 库文件 (.lib)。最好的方法是在非托管代码周围使用非托管包装器。参考DllImportAttribute
。
在 MSDN 帮助文档中有一个很好的用法示例:
using System;
using System.Runtime.InteropServices;
class Example
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
另请注意:您可以在 c++ 库周围使用托管 c++ 包装器,但最好在非托管 c++ 代码中编写包装器。
【讨论】:
DllImport 可以导入 *.lib 吗?我不知道:) 是的,我的回答有点草率。我读了 c++ 并立即认为他的意思是编译的程序集。我错过了 .lib 部分,因为有些人使用术语库类似于汇编。以上是关于从 c# 访问 C++ .lib 库的主要内容,如果未能解决你的问题,请参考以下文章