Sidarta 0 Denunciar post Postado Fevereiro 1, 2010 Olá, Estou tendo problema para criar uma dll que acesse as funções de uma dll ActiveX. A dll ActiveX já foi instalada, só preciso criar uma outra dll que acesse as funções dela. Criei a seguinte dll, que está dando erro de Access violation: library testeZk; uses ShareMem, SysUtils, Classes, Windows, ActiveX, Graphics, OleCtrls, OleServer, StdVCL, Variants, ComServ, zkemkeeper_TLB in 'zkemkeeper_TLB.pas'; {$R *.res} {$R *.TLB} var CZKEM1: TCZKEM; function fnConnect_Net(const IPAdd: WideString; Port: Integer): WordBool; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF} begin result := CZKEM1.Connect_Net(IPAdd, Port); end; function fnSetCommPassword(CommKey: Integer): WordBool; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF} begin result := CZKEM1.SetCommPassword(CommKey); end; exports fnConnect_Net; exports fnSetCommPassword; end. Quando testo a função fnConnect_Net da dll acima, dá esse erro: Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00386B16 in module testeZk.dll'. Read of address 0000022F0'. Process stopped. Use Step or Run to continue. Alguém tem alguma sugestão? O que estou fazendo errado? Grato, Sidarta. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Fevereiro 1, 2010 Tenta fazer a declaração das funções, colocar a sessão "Exports" e dpois inplementar as funções.. uses ShareMem, SysUtils, Classes, Windows, ActiveX, Graphics, OleCtrls, OleServer, StdVCL, Variants, ComServ, zkemkeeper_TLB in 'zkemkeeper_TLB.pas'; {$R *.res} {$R *.TLB} var CZKEM1: TCZKEM; function fnConnect_Net(const IPAdd: WideString; Port: Integer): WordBool; stdcall; function fnSetCommPassword(CommKey: Integer): WordBool; stdcall; exports fnConnect_Net, fnSetCommPassword; function fnConnect_Net(const IPAdd: WideString; Port: Integer): WordBool; begin result := CZKEM1.Connect_Net(IPAdd, Port); end; function fnSetCommPassword(CommKey: Integer): WordBool; {$IFDEF WIN32} stdcall; begin result := CZKEM1.SetCommPassword(CommKey); end; end. Compartilhar este post Link para o post Compartilhar em outros sites
Sidarta 0 Denunciar post Postado Fevereiro 1, 2010 Cara, Valeu a dica, mas não compilou. Tentei seguir os passos para criar a dll que acessa as funções da dll ActiveX a partir desse link: http://pw1.netcom.com/~cherrman/dl030.htm. Alguma idéia? []'s Sidarta. Compartilhar este post Link para o post Compartilhar em outros sites