Pergunta

Eu tenho um classe não gerenciada que eu estou tentando dllexport de um gerenciada arquivo DLL. Estou tentando usar a classe não gerenciada em outro gerenciada arquivo DLL. No entanto, quando tento fazer isso eu recebo link erros.

Já fiz isso muitas vezes com arquivos DLL não gerenciados, então eu sei como isso funciona. Eu sei como usar "ref público", etc. em classes gerenciadas.

Existe alguma bandeira em algum lugar eu preciso definir? Ou eu tenho que fazer alguma mágica DllImport?

Esta é em .NET 2.0 e Visual Studio 2005 .

Foi útil?

Solução

Você precisa usar uma interoperabilidade montagem de bibliotecas não gerenciadas ou componentes COM. Aqui está um ligação com boa informações sobre isso.

Outras dicas

Se você quiser usar uma classe não gerenciada a partir de código gerenciado, você pode:

  1. Use alguns P / Invoke para carregar as funções de membro da classe (construtor, destrutor, etc.) e fazer uma nastier gerenciado classe wrapper para chamar as funções de membro "reais". Isto torna-se ainda pior quando existem métodos virtuais envolvidos.
  2. A segunda opção (que na minha opinião é melhor) é escrever um C ++ / CLI invólucro de classe (que você mencionou que você está familiarizado com isso) que é um proxy simples para a classe não gerenciada. Para cada função membro você tem na classe não gerenciado, você terá um similar em sua classe proxy. Então é um caso simples de adicionar uma referência a essa DLL do seu projeto gerenciado, e você vai ser capaz de usar sua classe como qualquer outra classe .NET. Leve em consideração que você vai correr em mais trabalho se sua classe expõe outras coisas não gerenciado (aqueles que não podem ser comandada).

Se precisar de mais informações sobre a segunda opção, eu poderia procurar alguns links antigos que explicaram essa técnica mais.

Se é um arquivo DLL, em seguida, você pode usar COM .NET interoperabilidade. pergunta Stack Overflow Existe uma prática recomendada para acessar funções COM C ++ nativa a interoperabilidade de C #? é outra questão que responde a esta.

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