Pergunta

O que é a melhor maneira de dinamicamente P código não gerenciado / Invoke do .NET?

Por exemplo, eu tenho um número de DLL não gerenciado é com exportações comum de estilo C entre eles. Eu gostaria de tomar o caminho para uma DLL e, em seguida, P / Invoke uma função com base no nome exportado. Eu não sei o nome da DLL até a execução.

Basicamente, o que é o equivalente a LoadLibrary e GetProcAddress for .NET? (Eu tenho o código que usa essas funções para atingir o mesmo objetivo, totalmente em código não gerenciado existente).

Foi útil?

Solução

Este artigo descreve um typesafe wrapper gerenciado para GetProcAddress que deve ajudá-lo.

http://blogs.msdn.com/ jmstall / Arquivo / 2007/01/06 / Typesafe-GetProcAddress.aspx

Outras dicas

Você pode fazer isso por P / Invocando em LoadLibrary e GetProcAddress, e em seguida, usando Marshal.GetDelegateForFunctionPointer .

Para mais detalhes, consulte este artigo .

Veja também este post de Jonathan Swift título dinamicamente chamar uma dll não gerenciada de .net

Uma opção que você tem é criar uma função nativa que é responsável por carregar a DLL e função apropriada na memória e, em seguida, retornar essa função para código gerenciado com base em seu caminho. Desta forma, você pode usar o truque GetProcAddress naturalmente e retornar o ponto de função. Você pode, então, PInvoke para esta função e voltar um delegado que irá então invocar para a DLL adequada.

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