调用delphi写的dll时候,出现错误,请各路高手,给与分析!先谢谢了,小弟分不多!(10分)

  • 主题发起人 主题发起人 emailqjc
  • 开始时间 开始时间
E

emailqjc

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下DLL在delphi调用时候不稳定,有时出错,有时候不出错,请问什么原因[?]?
library yjCom;

uses
SysUtils,
Classes,
Dialogs,
Forms,
ADODB,
db,
Activex,
windows,
StdCtrls,
u_DBcnn in 'u_DBcnn.pas' {DBcnn: TDataModule};

{$R *.res}
var
SeqNumber:integer;//包序号
procedure DLLEntryPoint(dwReason: DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH:begin //进程进入时
CoInitialize(nil);
end;
DLL_PROCESS_DETACH:begin //进程退出时
CoUninitialize;
end;
end;
end;

function QueryUserInfo(AUserid:PChar):Pchar;stdcall
//用户查询
begin
DBcnn:=TDBcnn.Create(nil);
try
with DBcnn.ADQ do
begin
close;
sql.Clear;
sql.Text:='select yhxm,dzm,dh,areaname,dz,djrq,yhs from view_baseinfo where UID='''+Trim(AUserid)+'''';
open;
first;
if recordcount=0 then
begin
Result:='';
exit;
end;
end;
Result:=PCHAR(DBcnn.ADQ.FieldByName('yhxm').AsString+' '+DBcnn.ADQ.FieldByName('dzm').AsString+' '+
DBcnn.ADQ.FieldByName('dh').AsString+' '+DBcnn.ADQ.FieldByName('areaName').AsString+' '+
DBcnn.ADQ.FieldByName('dz').AsString+' '+DBcnn.ADQ.FieldByName('djrq').AsString+' '+
DBcnn.ADQ.FieldByName('yhs').AsString);
finally
end;
end;

exports
QueryUserInfo;

begin
DllProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
 
怎么没有人回答啊,各位大哥大姐们,小弟分数不多了,你们就别嫌分数不多啊,帮帮忙。。。。。
 
应该是ADO组件的问题.
而且你的DBcnn在创建以后.没有FREE.数据集在打后以后.也没有关闭..你先试试关闭和Free.看看可不可以

这么简单的东西为什么要写成DLL呢?
你把DLL改成一个单元或主线程中的一个函数.应该就没问题的.
 
fghyxxe ,你好,首先感谢你的回答,
我想将我所有的东西封装起来(提供给第三方开发人员调用),不想让别人知道我的数据库结构啊,你所说的主线程中的一个函数是什么意思,请能不能详细点,最好有DEMO谢谢
 
怎么没见到DBcnn的声明

function QueryUserInfo(AUserid:PChar):Pchar;stdcall
//用户查询
var Dbcnn:TDBCnn;
begin
result:='';
if auserid='' then exit;
DBcnn:=TDBcnn.Create(nil);
try
with DBcnn.ADQ do
begin
close;
sql.Clear;//这句可略
sql.Text:='select yhxm,dzm,dh,areaname,dz,djrq,yhs from view_baseinfo where UID='''+Trim(AUserid)+'''';
open;
first;
if not eof then
Result:=PCHAR(FieldByName('yhxm').AsString+' '+FieldByName('dzm').AsString+' '+
FieldByName('dh').AsString+' '+FieldByName('areaName').AsString+' '+
FieldByName('dz').AsString+' '+FieldByName('djrq').AsString+' '+
FieldByName('yhs').AsString);
end;
finally
DbCnn.Free;
end;
end;
 
后退
顶部