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