Usuário com melhor resposta
Como utilizar dll no c++

Pergunta
-
Respostas
-
Se sua dúvida for como utilizar sua DLL nativa, numa aplicação gerenciada (Windows Forms). Uma das alternativas será o P/Invoke. A outra é C++ Interop, que é bem mais transparente.
Sobre P/Invoke:
De uma olhada nesta thread: http://social.msdn.microsoft.com/Forums/pt-BR/vscmaismaispt/thread/511aef9f-d9a4-4682-804c-6b0b59cc61cf
No exemplo que postei naquela thread tem:
[DllImport("kernel32")]
extern "C" Boolean GetVersionEx( [In, Out] OSVERSIONINFOEX% osvi );isto é como vc faz para importar uma dll:
[DllImport("mylib.dll")]
extern "C" void MyFunctionInsideDll( Int32 a, Int64 b, Real c, Double d );Isto considerando se na DLL MyFunctionInsideDll for: void MyFunctionInsideDll( int a, long b, float c, double d );
Se vc tiver ponteiros ou strings terá que usar técnicas de marshalling (só procurar na documentação do .NET Framework como fazer isto).
Use o P/Invoke.net: www.pinvoke.net para ver exemplos de como ocorre o mapeamento das APIs do Windows para C# usando P/Invoke.
Fabio Galuppo- Sugerido como Resposta Victor Arias terça-feira, 1 de junho de 2010 12:59
- Marcado como Resposta Douglas Canto terça-feira, 1 de junho de 2010 13:18
Todas as Respostas
-
LoadLibrary, GetProcAddress e FreeLibrary são as APIs que vc precisará.
Aqui tem um guideline: http://www.codeproject.com/KB/DLL/SimpleDllP3.aspx
Fabio Galuppo -
Fabio,
Estou fazendo uma aplicação em c++ utilizando o windows forms. Eu até baixei o código de xemplo do site que me passou e entendi como usar a dll, porém tem um pequeno problema. Como estou trabalhando com windows form ele não aceita os comando para chamar a dll, por exemplo ele não reconhece o loadlibrary. Voltei a estava zero novamente, já efetuei diversas pesquisas, mas não consegui obter solução.
-
Se sua dúvida for como utilizar sua DLL nativa, numa aplicação gerenciada (Windows Forms). Uma das alternativas será o P/Invoke. A outra é C++ Interop, que é bem mais transparente.
Sobre P/Invoke:
De uma olhada nesta thread: http://social.msdn.microsoft.com/Forums/pt-BR/vscmaismaispt/thread/511aef9f-d9a4-4682-804c-6b0b59cc61cf
No exemplo que postei naquela thread tem:
[DllImport("kernel32")]
extern "C" Boolean GetVersionEx( [In, Out] OSVERSIONINFOEX% osvi );isto é como vc faz para importar uma dll:
[DllImport("mylib.dll")]
extern "C" void MyFunctionInsideDll( Int32 a, Int64 b, Real c, Double d );Isto considerando se na DLL MyFunctionInsideDll for: void MyFunctionInsideDll( int a, long b, float c, double d );
Se vc tiver ponteiros ou strings terá que usar técnicas de marshalling (só procurar na documentação do .NET Framework como fazer isto).
Use o P/Invoke.net: www.pinvoke.net para ver exemplos de como ocorre o mapeamento das APIs do Windows para C# usando P/Invoke.
Fabio Galuppo- Sugerido como Resposta Victor Arias terça-feira, 1 de junho de 2010 12:59
- Marcado como Resposta Douglas Canto terça-feira, 1 de junho de 2010 13:18