function ExecSQL(var ADOQuery: TADOQuery;SQLString: PChar;IsOpen: Boolean): Boolean;
begin
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add(SqlString);
try
if IsOpen then Open
else ExecSQL;
Result := True;
except
Result := False;
end;
end;
end;
这是在DLL中写的,我在外面调用如下:
procedure TForm1.Button13Click(Sender: TObject);
var
ADOQry: TADOQuery;
ADDR: DWord;
begin
ADOQry := TADOQuery.Create(nil);
try
ADOQry.Connection := sqlADOCon;
PublicDBFunExport.ExecSQL(ADOQry,'Select * from sysdatabases',False);
finally
FreeAndNil(ADOQry); //a
end;
end;
在执行a的时候出错“Invalid pointer Opreation”,为什么??我看过ADOQry的地址是不变的
begin
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add(SqlString);
try
if IsOpen then Open
else ExecSQL;
Result := True;
except
Result := False;
end;
end;
end;
这是在DLL中写的,我在外面调用如下:
procedure TForm1.Button13Click(Sender: TObject);
var
ADOQry: TADOQuery;
ADDR: DWord;
begin
ADOQry := TADOQuery.Create(nil);
try
ADOQry.Connection := sqlADOCon;
PublicDBFunExport.ExecSQL(ADOQry,'Select * from sysdatabases',False);
finally
FreeAndNil(ADOQry); //a
end;
end;
在执行a的时候出错“Invalid pointer Opreation”,为什么??我看过ADOQry的地址是不变的
FreeAndNil(ADOQry); //a
1。 在dll中定义返回string字符串的函数时,如果没有特殊处理调用该函数
在退出调用该函数的过程(函数/事件)时,会出现以下错误:
Invalid Pointer Operator!
2。当在单元中添加ShareMem时,在退出程序的时候会出现同样的错误
3。当在调用dll的项目文件中(不是在单元文件)添加ShareMem时,能够正常
运行.
4. String类型是Borland自定的特殊类型,使用起来真是无比方便,
但是,它需要borladmm.dll的支持,在动态链接库中想使用STRING类型
要经过特殊的手段,因此还是使用PCHAR类型吧。PCHAR也挺方便的。
另外如果没有特殊处理的话: WideString-可以
AnsiString-不可以