Antes de você encontrar a parte técnica, é interessante saber o motivo da incompatibilidade entre o Pchar do D7 e D2009. É que o D2009 é Unicode (aceita caracteres especiais, no nosso caso utilizamos o russo e foi somente possível no D2009).
Ao
invés de utilizar pChar na DLL tem que utilizar PAnsiChar.
è
(Manter a compatibilidade as alterações da DLL foram
feitas e compiladas no Delphi 7.0)
A DLL – Declaração da função
Delphi 7.0
//function
flGerarSenhaDB(hWnd: HWND; const lpPathPalavraChave, lpDataBase: pChar): pChar;
stdcall;
Delphi 2009
function flGerarSenhaDB(hWnd:
HWND; const lpPathPalavraChave, lpDataBase: pAnsiChar): pAnsiChar; stdcall;
Declaração nos Programas que utilizam
a DLL
Delphi 7.0
flGerarSenhaDB:
function(hWnd: HWND; const lpPathPalavraChave : PChar; lpDataBase: PChar):
PChar; stdcall;
Delphi 2009
flGerarSenhaDB:
function(hWnd: HWND; const lpPathPalavraChave : PAnsiChar; lpDataBase:
PAnsiChar): PAnsiChar; stdcall;
Na declaração a utilização do PAnsiChar, foi
suficiente para funcionar. Mas na execução retornava somente 1 (um) caractere
foi necessário a utilização da função AnsiString.
Bingo funcionou...
Chamada para executar função da DLL
Delphi 7.0
flGerarSenhaDB( Application.Handle, PChar(sPathPalavra), PChar(sNmDataBase) );
Delphi 2009
flGerarSenhaDB(Application.Handle, PAnsiChar(AnsiString(sPathPalavra)), PAnsiChar(AnsiString(sNmDataBase)) );
Adilson, mto obrigado pelo post :)
ResponderExcluirSalvou meu dia, pois me deparei com uma situação semelhante a esta e mesmo lendo e relendo as orientações na web, não estava conseguindo entender e passar os parâmetros de maneira correto para a DLL.
Abç e sucesso.