请帮我解决这个错误! (100分)

  • 主题发起人 主题发起人 狸猫
  • 开始时间 开始时间

狸猫

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DLL中写了如下一个函数。
function TestQuery(aHandle : THandle;var aDirect : String) : String;StdCall;
; var query1 : TQuery;
begin
; Application.Handle := aHandle;
; query1 := TQuery.Create(Application);
; with query1 do
; begin
; ; DatabaseName := aDirect;
; ; Sql.Text := 'Select * from sydflds';
; ; Prepare;
; ; Open;
; end;

; with query1 do
; begin
; ; Close;
; ;// Free;
; end;

; Result := 'OK';
end;
调用程序如下
function TestQuery(aHandle : THandle;var aDirect : String) : String;StdCall;external 'test.dll';

procedure TForm1.Button1Click(Sender: TObject);
; var ls, a : String;
begin
; a := './sy';
; ls := TestQuery(Application.Handle,a);
; Showmessage(ls);
end;
运行是出现"Invalid pointer operation"的错误。
请问是什么原因?
 
把String改为PChar就好了,Delphi生成Dll模板里就告诉你不让你在dll传递参数时
用String
 
我试过用PChar,也是不行哦。
 
sharemem加上去了么?
 
Prepare;之后请UpPrepare;释放资源
用PChar类型应该不会有错
Dll种的函数一定要有异常处理,你改为如下试一试:
function TestQuery(aHandle : THandle;aDirect : PChar) : PChar;StdCall;
; var query1 : TQuery;
begin
; Result:='';
; Application.Handle := aHandle;
; query1 := TQuery.Create(Application);
; with query1 do
; begin
; ; DatabaseName := aDirect;
; ; Sql.Text := 'Select * from sydflds';
; ; try
; ; ; Prepare;
; ; ; Open;
; ; ; Upprepare;
; ; except
; ; ; Result:='Error';
; ; end; ;
; end;

; with query1 do
; begin
; ; if Active then
; ; ; ;Close;
; ; Free;
; end;

; Result := 'OK';
end;
调用程序如下
function TestQuery(aHandle : THandle;var aDirect : PChar) : PChar;StdCall;external 'test.dll';

procedure TForm1.Button1Click(Sender: TObject);
; var ls, a : String;
begin
; a := './sy';
; ls := TestQuery(Application.Handle,PChar(a));
; Showmessage(ls);
end;
 
刚才有一个错误:
UnPrepare请放在Close之后
 
string 不是基本类型,在其他语言中都属于类,而dll有可能是跨语言的,
所以不可以直接在dll中作为参数或函数值
 
同意 [red]我是帅哥[/red]
 
后退
顶部