Vc fez todos os procedimentos?, criou o arquivo .h? registrou a dll? fez uma programa em C++ no padrão JNI chamando a tal dll?
J
jrbruno
Sim fiz todos os os procedimentos
Tentei no Visual Studio 2003 e no 2005 e em ambos apresentaram o mesmo problema
Você já passou por isso antes?
Pedrosa
Vc já conseguiu testar essa dll com outra tecnologia para ver se está funcionando?
J
jrbruno
Não testei não, mas em uma outra máquina ja funcionou… estou achando que é alguma configuração da minha maquina…
Pedrosa
Desregistra a dll, registra e tenta de novo, esse erro é muito estranho.
J
jrbruno
Eu esqueci de lhe falar, esse dll não é registrada… e se for ela não esta conseguindo pois quando mando registrar ela não da nenhuma mensagem de erro e muito menos mensagem dizendo que registrou…
Será que tem alguma coisa a ver com a configuração que eu fiz no VS2003???
T
thingol
a) DLLs JNI não precisam, não devem e não podem ser registradas.
b) Provavelmente você está usando alguma opção de compilação para a sua DLL que está requerendo que você despache com a sua aplicação algumas outras DLLs, como MSVCRT.DLL e/ou msvcp70.dll ou msvcp71.dll. Isso pode dar muitos problemas; é melhor alterar a opção de compilação para que ele não precise carregar essas DLLs.
Você tem de alterar para usar /MT (na versão Release). Nunca despache a versão Debug para rodar em outra máquina.
Pedrosa
Agora fiquei curioso, fiz um teste aqui com JNI e registrei a dll e funcionou corretamente, mas como vc disse não a é melhor maneira, qual seria então? Seria apontar no path do Windows a jvm.dll e xxx.dll junto com a dll em padrão JNI?
E quais problemas posso ter ao registrar tal dll?
T
thingol
Uma DLL do Windows só pode ser registrada se ela tiver duas entradas (entry points):
DLLRegisterServer -> grava a informação da DLL no Registry para o COM usar
DLLUnregisterServer-> limpa a informação da DLL no Registry para o COM usar
Nesse caso, quando você registra ou desregistra (com RegSrv32), você na verdade chama uma dessas entradas da DLL. Isso só é útil quando você tem uma DLL que pode ser chamada a partir do COM+, ou então a partir de um programa VB 6.0 ou Delphi.
T
thingol
Eu já vi gente que escreve DLLs que podem ser chamadas de um monte de jeitos: via JNI, via COM ou então como se fosse uma DLL antiga (que você carrega no C++ com uma .LIB mesmo). Pode ser que você tenha uma DLL dessas, que pode fazer tudo (assobiar e chupar cana).
J
jrbruno
Pessoal, fiz tudo o que vcs falaram mas até agora não consegui… estou anexando o resultado…
T
thingol
a) Cheque se sua DLL tem realmente os pontos de entrada corretos.
Isso pode ser feito da seguinte maneira:
No item do menu Microsoft Visual Studio 2005 (ou Microsoft Visual Studio .NET 2003) existe um submenu Visual Studio Tools, e então uma entrada Microsoft Visual Studio Command Prompt. Isso lhe dá um Command Prompt (linha de comando do DOS) que já está com o path correto para chamar a ferramenta dumpbin.
Vou dar um exemplo para a DLL JNI jpeg.dll (que está em C:\arquivos de programas\jre1.5.0_06\bin)