Existe uma maneira de chamar um (não COM) dll não gerenciada da aplicação C #?
-
19-08-2019 - |
Pergunta
Existe uma maneira de usar (referência) uma DLL escrito em um C não gerenciado ++ (não uma biblioteca COM) no meu aplicativo C #?
Quando tento fazer referência a ela de dentro do Visual Studio, eu recebo 'não é um objeto COM' mensagem de erro.
Talvez haja algum tipo de tradutor \ router que COMify minha referência DLL? Eu não tenho nenhuma idéia de como COM e interoperabilidade trabalho, desde que comecei a programar quando este já era desnecessário para mim.
Obrigado.
Solução
Você precisa usar o atributo DllImport. Aqui está um exemplo para a função Win32 PostMessage:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);
Outras dicas
Veja " Consumir funções DLL não gerenciada " tópico no MSDN:
http://msdn.microsoft.com/en-us/library /26thfadc.aspx
Não há necessidade de adicionar qualquer procuração COM, .NET pode consumir DLLs diretamente usando o [DllImport] atributo. Você também tem controle total sobre a triagem entre NET e a DLL não gerenciado, especificando atributos adicionais.
Joe já respondeu isso, então eu vou para alinhavar esta on - para salvar-se algum tempo e não ter que desenterrar e assinaturas de função mangle, P / Invoke tem uma biblioteca completa bonita de assinaturas Win32, na forma de tanto um wiki e um plug-in Visual Studio!
Confira no P / Invoke