É duro ser iniciante em C++, precisar fazer DLL’s e não saber resolver os problemas… mas fazer oque… estamos aqui para aprender, rsrsrss…
Bom… Estou tentando compilar esse código C++ (para acessar do Java com JNI):
ExecutaDll.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _Java_br_com_unimake_nativo_ExecutaDll_telaInteira@8
ExecutaDll.obj : error LNK2019: unresolved external symbol __imp__FindWindowW@8 referenced in function _Java_br_com_unimake_nativo_ExecutaDll_telaInteira@8
ExecutaDll.obj : error LNK2019: unresolved external symbol __T referenced in function _Java_br_com_unimake_nativo_ExecutaDll_telaInteira@8
w32.dll : fatal error LNK1120: 3 unresolved externals
Não se esqueça de mencionar as bibliotecas do Windows que são necessárias. No seu caso em particular, FindWindow e ShowWindow (que são as APIs que estão dando esse erro de LNKblablabla…) estão em:
user32.lib
Saiba ler o MSDN. Por exemplo, para achar a página de FindWindow no MSDN, efetuei uma busca do Google por:
FindWindow site:msdn.microsoft.com
E achei esta página:
Lá ela indica:
Ou seja, você precisa indicar na hora de linkar seu programa (não sei exatamente como é a sua linha de comando) o arquivo user32.lib.
Mais uma coisinha…Eu só uso _T quando escreve programas em C++ + Unicode (acho que não é bem seu caso); não se enrole com esses _T e outras coisas malucas. No seu caso, ele se manifestou como um símbolo não encontrado.
É um bocadinho chato usar o _T; eu em particular evito usar _T e menciono explicitamente que a string é unicode (ou seja, em vez de ser um char* é um wchar_t*) usando a notação L"string".
Obrigada pelas dicas de C++, está salvando minha vida!
Eu realmente tinha visto esse “Import library User32.lib”, mas eu não sei como que eu posso importar isso, rsrs…
Vou dar uma pesquisada melhor em como fazer isso, mas de qualquer forma, vou postar o que eu estou escrevendo na minha linha de comando:
Estava pesquisando e achei outra forma de importar a library. Eu acrescentei a instrução #pragma comment(lib, “user32.lib”) logo após os #include do meu código.
Eu em particular gosto de usar esse #pragma quando vou usar alguma biblioteca que não é uma das APIs do Windows.
Quando é uma API do Windows prefiro mencioná-la nas opções de compilação.
Por exemplo, quando crio uma biblioteca (digamos que ela seja compilada pra “blablabla-win32-debug.lib” em modo Win32/Debug, para “blablabla-x64-release.lib” em modo X64/Release etc.) eu ponho esse #pragma no .h dessa biblioteca, e então ponho os devidos #if … #endif para habilitar o import correto da biblioteca dependendo do modo de compilação.
:?: :?: :?: :?: :?: :?: :?: :?: :?:
Vixi… programar em C++ é mais complexo que eu imaginei, rs. Tenho muito pra aprender, porque teve um projeto java da empresa que caiu aqui pra mim fazer e muitas coisas estou tendo que fazer usando linguagem C pra comunicar com o sistema operacional.
Mas pode ter certeza que assim que eu tiver um tempo maior, vou comprar um bom livro de C++ pra aprender bem esses macetes.
Poizé…
Estou em um projeto trabalhando com C++ há quase 2 anos, e apesar de ter aprendido (e usado rotineiramente) C++ há quase 20 anos, ainda há coisas que estou aprendendo.