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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top