从C#访问C++.lib库

Accessing a C++ .lib library from c#

本文关键字:lib C++ 访问      更新时间:2023-10-16

我有一个c++库文件(.lib(。如何从c#访问其中的函数?我已经读到,我可以将库文件包装在一个c++dll中,并以这种方式公开函数。这是唯一的办法吗?我不是代码的所有者,所以我的选择是有限的。

使用C++/CLI程序集包装C++库。

C++/CLI允许您混合使用托管代码和非托管代码,充当C#和本机C++之间的桥梁。它实际上非常简单,也相对容易做到,尽管如果有很多类/函数要包装,它可能会变得乏味。

这里有一个例子。

您不能直接访问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++代码编写包装器。