Доступ к библиотеке С++.lib из С#

У меня есть файл библиотеки С++ (.lib). Как я могу получить доступ к функциям внутри него из С#? Я прочитал, что я могу обернуть файл библиотеки в dll С++ и разоблачить функции таким образом. Это единственный способ? Я не являюсь владельцем кода, поэтому мои варианты ограничены.

Ответ 1

Оберните библиотеку С++ с помощью сборки С++/CLI.

С++/CLI позволяет смешивать управляемый и неуправляемый код, служащий мостом между С# и родным С++. Это на самом деле очень просто и относительно легко сделать, хотя он может утомиться, если у вас есть много классов/функций для обертывания.

Здесь является одним из примеров.

Ответ 2

Вы не можете напрямую получить доступ к файлу библиотеки С++ (.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);
    }
}


Также обратите внимание: вы можете иметь управляемую С++-оболочку вокруг вашей библиотеки С++, но лучше написать свою оболочку в неуправляемом коде С++.

Ответ 3

Вы можете конвертировать lib в dll с помощью этого cmd script. После этого вы сможете использовать DllImport для доступа к своим функциям. Но вам пришлось немного изменить его, чтобы сделать эту работу script.