Есть ли способ вызвать неуправляемую (не COM) DLL из приложения C #?
-
19-08-2019 - |
Вопрос
Есть ли способ использовать (ссылаться) на 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