关于DLL的应用问题 ( 积分: 50 )

  • 主题发起人 主题发起人 gdzscj
  • 开始时间 开始时间
function codetogid(objects:string;code:string):integer;stdcall;

这个函数的变量类型改成pchar
 
在退出时还是会出现:invalid pointer operation
就只有这个问题了,大家帮帮忙吧!
 
你在dll单元里使用的adoquery没有创建和free语句啊,在dll单元里可不象在app里面直接拉过来就能用了,你的创建吧。
 
function codetogid(app:tapplication;objects:shortstring;code:shortstring):integer;stdcall;
var adoquery1:tadoquery;
begin
CoInitialize(nil);
application:=app;
dllform:=Tdllform.create(app);
adoquery1.Create(nil);
adoquery1.ConnectionString:='Provider=SQLOLEDB.1;Password=l78z;Persist Security Info=True;User ID=sa;Initial Catalog=cjpos;Data Source=cj/cj';
try
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select gid from '+objects+' where code='''+code+'''';
ADOQuery1.Open;
if ADOQuery1.RecordCount>0 then
result:=ADOQuery1.fieldbyname('gid').AsInteger
else
result:=0;
finally
freeandnil(dllform);
end;
ADOQuery1.Free;
couninitialize;
end;
这样写还是有错,为什么呢?
 
不用传TApplication,传这个的Handle过来就行了。
你没有用String,所以把所有的ShareMem都删掉。
把freeandnil(dllform);前面加个if Assigned(DllForm) then,释放类或指针时,判断是个好习惯。
ADOQuery1.Free;couninitialize;放到finally里面去。
 
还是不行,各位救命啊!
 
看看这个,也许会有帮助
http://www.delphibbs.com/keylife/images/u166846/boy2002cn.DLL做登录窗体.zip
 

Similar threads

I
回复
0
查看
673
import
I
I
回复
0
查看
686
import
I
I
回复
0
查看
778
import
I
I
回复
0
查看
709
import
I
S
回复
0
查看
830
SUNSTONE的Delphi笔记
S
后退
顶部