Есть ли способ вызвать неуправляемую (не COM) DLL из приложения C #?

StackOverflow https://stackoverflow.com/questions/476043

Вопрос

Есть ли способ использовать (ссылаться) на DLL, написанную на неуправляемом C ++ (не на COM-библиотеке), в моем приложении C #?

Когда я пытаюсь сослаться на него из Visual Studio, я получаю сообщение об ошибке «не COM-объект».

Может быть, есть какой-то переводчик \ маршрутизатор, который бы COMify моей ссылки на DLL? Я понятия не имею, как работают COM и COM, поскольку я начал программировать, когда это уже было мне ненужно.

Спасибо.

Это было полезно?

Решение

Вам необходимо использовать атрибут DllImport. Вот пример для функции Win32 PostMessage:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);

Другие советы

Смотрите " Использование неуправляемых функций DLL " тема на MSDN:

http://msdn.microsoft.com/en-us/library /26thfadc.aspx

Нет необходимости добавлять прокси-сервер COM. NET может использовать библиотеки DLL напрямую, используя атрибут [DllImport] . У вас также есть полный контроль над распределением между .NET и неуправляемой DLL путем указания дополнительных атрибутов.

Джо уже ответил на это, поэтому я собираюсь заняться этим - чтобы сэкономить время и не нужно копать и манипулировать сигнатурами функций, P / Invoke имеет довольно полную библиотеку сигнатур Win32 в форме и вики, и плагин для Visual Studio!

Проверьте это на P / Invoke

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top