全部博文(788)
分类:
2009-02-03 09:56:32
旧题新帖? dll 入口定义要帖出来, 入口函数体也要(执行部分就没什么用)
还有那段引起 access violation 的代码是哪句
数据库连接可以由 dll 里面去建立的, 在 dll 间送对像总之有点不好把握
function TOpDataBase.OpenSql(const SqlStr: string): Boolean;
begin
Result := QueryDB_Ado(FDBHandle, PChar(SqlStr), FAdoQuery, FErrStr);
if not Result then
SetConnected(False);
end;
调用以上函数时报错 access violation
dll定义:
Function QueryDB_Ado( P_Handle :Integer;
P_SQLStr :PChar;
Var P_AdoQuery1:TAdoQuery;
P_ErrScript:PChar):Boolean; stdcall; external 'DBAccessDll.dll';
至于dll内部代码是什么 不清楚
不明白的是为什么运行5,6天后才报错呢
主要矛盾在这两个参数
var P_AdoQuery1 :TAdoQuery; // 这个倒不是问题, 不标准
P_ErrScript:PChar // 这个嗯,怎么说
FErrStr 你的定义是什么? Pchar?
如果是 Pchar 那你有没分配内存?应该分配多少内存?dll 作得不好哈, 那你只要分配个几K让他够了
估计这个 dll 调用次数很少, 要不然, 100 次以内应该就会出错
FErrStr 是一个查询数据库报错时返回的信息啊
它的定义是
FErrStr: array[0..255] of Char;
一个数组 不用分配内存吧
如果查询正确的话 这个FErrStr 是用不到的 仅仅是用来存放错误信息
那我就不知了, 帮顶吧