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

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

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

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

Спасибо.

Ответы [ 3 ]

7 голосов
/ 24 января 2009

Вам необходимо использовать атрибут 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);
5 голосов
/ 24 января 2009

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

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

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

2 голосов
/ 29 января 2009

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

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

...