不行呀.我试了.改成别的类型也不行.调用DLL里的一个文件COPY操作. function coyfl(fl1,fl2:pchar):boolean; begin copyfile(fl1,fl2,false); result :=false; end;这个是DLL里的过程.用EXE在调用过程中,没有COPY成功.释放的时候就报一个地址错误.
function coyfl(fl1,fl2:pchar):boolean;stdcall;
调用方的声明: function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll;
上面所说的delphi 7下测试通过 在delphi 2009 测试不行.拿delphi 2009重新编dll 也不行.DLL 内方法 function coyfl(fl1,fl2:pchar):boolean; begin copyfile(fl1,fl2,false); result :=false; end;EXE内调用function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll; 静态Tcoyfl = function coyf1(fl1,fl2: PAnsiChar): boolean 动态以上二种方法在2009 下调用都会出现地址错误.
function coyfl(fl1,fl2:pwidechar):boolean; begin copyfile(fl1,fl2,false); result :=false; end; 在 Delphi2009 下copyFIle 請用pwidechar
DLL调用我是做了一个测试COPY的DLL, 然后用EXE调用DLL完成COPYDLL内function 如下function coyfl(fl1,fl2:pwidechar):boolean; begin copyfile(fl1,fl2,false); result :=false; end;EXE 内调用过程如下 procedure TForm1.Button1Click(Sender: TObject); //动态调用 var DLLHandle: THandle; Func: Tcoyfl; begin try DLLHandle := LoadLibrary('ProT.dll'); @Func := GetProcAddress(DLLHandle, 'coyfl1'); if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功 begin showmessage('OK'); end; finally FreeLibrary(DLLHandle); //// 报出地址错误. end; end; 错误为 Access violation at address 00000000 .read of address 000000
procedure TForm1.Button1Click(Sender: TObject); //动态调用 var DLLHandle: THandle; Func: Tcoyfl; begin try DLLHandle := LoadLibrary('ProT.dll'); if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败 Func := Tcoyfl(GetProcAddress(DLLHandle, 'coyfl1' (*这里注意区分大小写*))); if Not Assigned(Func) then Exit; //取得函数地址失败 if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功 begin showmessage('OK'); end; finally FreeLibrary(DLLHandle); //// 报出地址错误. end; end;
try (*放到LoadLibrary之后,并且是判断LoadLibrary成功之后*) DLLHandle := LoadLibrary('ProT.dll'); if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败
在哪里报错?
调用的时候应错的?
dll也没错吧?
释放的时候错的?
function coyfl(fl1,fl2:pchar):boolean;
begin
copyfile(fl1,fl2,false);
result :=false;
end;这个是DLL里的过程.用EXE在调用过程中,没有COPY成功.释放的时候就报一个地址错误.
function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll;
在delphi 2009 测试不行.拿delphi 2009重新编dll 也不行.DLL 内方法
function coyfl(fl1,fl2:pchar):boolean;
begin
copyfile(fl1,fl2,false);
result :=false;
end;EXE内调用function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll; 静态Tcoyfl = function coyf1(fl1,fl2: PAnsiChar): boolean 动态以上二种方法在2009 下调用都会出现地址错误.
function coyfl(fl1,fl2:pwidechar):boolean;
begin
copyfile(fl1,fl2,false);
result :=false;
end;
在 Delphi2009 下copyFIle 請用pwidechar
begin
copyfile(fl1,fl2,false);
result :=false;
end;EXE 内调用过程如下
procedure TForm1.Button1Click(Sender: TObject); //动态调用
var
DLLHandle: THandle;
Func: Tcoyfl;
begin
try
DLLHandle := LoadLibrary('ProT.dll');
@Func := GetProcAddress(DLLHandle, 'coyfl1');
if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功
begin
showmessage('OK');
end;
finally
FreeLibrary(DLLHandle); //// 报出地址错误.
end;
end;
错误为 Access violation at address 00000000 .read of address 000000
var
DLLHandle: THandle;
Func: Tcoyfl;
begin
try
DLLHandle := LoadLibrary('ProT.dll');
if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败 Func := Tcoyfl(GetProcAddress(DLLHandle, 'coyfl1' (*这里注意区分大小写*)));
if Not Assigned(Func) then Exit; //取得函数地址失败
if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功
begin
showmessage('OK');
end;
finally
FreeLibrary(DLLHandle); //// 报出地址错误.
end;
end;
DLLHandle := LoadLibrary('ProT.dll');
if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败