一个奇怪的DLL调用问题
2009-09-21 20:56
369 查看
我使用DLL封装了数据库操作对象,使用一直都没有问题。
这几天需要在DLL里作一些操作:对每一个目录下的DLL进行一次动态加载,并调用一个函数,来进行判断。
代码如下:
var
i : Integer;
Ask : Boolean;
FileName, DllFile : String;
tmList : TList; { 通过校验的文件列表 }
begin
tmList := TList.Create;
{ 是否有不使用的文件版本信息,有则删除 }
{ 删除非系统文件类型 }
(* *)
with FClientDataSet do
begin
try
if EnLib = 0 then
EnLib := LoadLibrary(Encode_DLL);
if EnLib = 0 then
raise EDLLLoadError.Create(Encode_DLL + LoadFileErr)
else
begin
@procGetFileVerify := GetProcAddress(EnLib, 'F0001');
if Assigned(procGetFileVerify) then
begin
end;
end;
First;
while not Eof do
begin
Ask := False;
for i := 0 to aList.Count - 1 do
begin
{ 删除非系统文件类型 }
if CompareText(PFileNode(aList.List^[i]).FileName, Fields.FieldByName('FileName').Value) = 0 then
begin
DllFile := PFileNode(aList.List^[i]).FilePath + PFileNode(aList.List^[i]).FileName;
FileName := PFileNode(aList.List^[i]).FileName;
try
if dllLib = 0 then
dllLib := LoadLibrary(PChar(DllFile));
if dllLib = 0 then
// raise EDLLLoadError.Create(DllFile + LoadFileErr)
else
begin
@procGetFileVInfo := GetProcAddress(dllLib, 'FM0001');
if Assigned(procGetFileVInfo) then
{ 进行校验 }
if procGetFileVerify(PChar(FileName), procGetFileVInfo) then
begin
tmList.Add(aList.List^[i]);
Ask := True;
Break;
end;
end;
finally
FreeLibrary(dllLib);
dllLib := 0;
end;
end;
end;
if not Ask then
Delete
else
Next;
end;
finally
FreeLibrary(EnLib);
EnLib := 0;
end;
end;
.....
我的数据库操作DLL是通过别的文件来调用的,是以加载的,现在只是加载一次,返回个值,然后释放掉。。
从DLL的理论上来说,我这个DLL只是引用+1,释放-1。
但是,我程序中数据库操作对象一直加载中,关闭,不释放,再开启那么报 "mismatch in datapacket" 错误。
报错代码段
FClientDataSet.Active := True;
好怪,再研究一下。。
这几天需要在DLL里作一些操作:对每一个目录下的DLL进行一次动态加载,并调用一个函数,来进行判断。
代码如下:
var
i : Integer;
Ask : Boolean;
FileName, DllFile : String;
tmList : TList; { 通过校验的文件列表 }
begin
tmList := TList.Create;
{ 是否有不使用的文件版本信息,有则删除 }
{ 删除非系统文件类型 }
(* *)
with FClientDataSet do
begin
try
if EnLib = 0 then
EnLib := LoadLibrary(Encode_DLL);
if EnLib = 0 then
raise EDLLLoadError.Create(Encode_DLL + LoadFileErr)
else
begin
@procGetFileVerify := GetProcAddress(EnLib, 'F0001');
if Assigned(procGetFileVerify) then
begin
end;
end;
First;
while not Eof do
begin
Ask := False;
for i := 0 to aList.Count - 1 do
begin
{ 删除非系统文件类型 }
if CompareText(PFileNode(aList.List^[i]).FileName, Fields.FieldByName('FileName').Value) = 0 then
begin
DllFile := PFileNode(aList.List^[i]).FilePath + PFileNode(aList.List^[i]).FileName;
FileName := PFileNode(aList.List^[i]).FileName;
try
if dllLib = 0 then
dllLib := LoadLibrary(PChar(DllFile));
if dllLib = 0 then
// raise EDLLLoadError.Create(DllFile + LoadFileErr)
else
begin
@procGetFileVInfo := GetProcAddress(dllLib, 'FM0001');
if Assigned(procGetFileVInfo) then
{ 进行校验 }
if procGetFileVerify(PChar(FileName), procGetFileVInfo) then
begin
tmList.Add(aList.List^[i]);
Ask := True;
Break;
end;
end;
finally
FreeLibrary(dllLib);
dllLib := 0;
end;
end;
end;
if not Ask then
Delete
else
Next;
end;
finally
FreeLibrary(EnLib);
EnLib := 0;
end;
end;
.....
我的数据库操作DLL是通过别的文件来调用的,是以加载的,现在只是加载一次,返回个值,然后释放掉。。
从DLL的理论上来说,我这个DLL只是引用+1,释放-1。
但是,我程序中数据库操作对象一直加载中,关闭,不释放,再开启那么报 "mismatch in datapacket" 错误。
报错代码段
FClientDataSet.Active := True;
好怪,再研究一下。。
相关文章推荐
- 关于Powerbuilder调用VC的dll出现的一个问题及解决办法
- 在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
- JNA的一个小问题-调用dll处理字符串,在java中不能反映出字符串变化
- 调用dll出现的一个问题,问题解决汗。。
- 一个奇怪的dll依赖问题
- PowerBuilder调用Delphi写的Dll时发生的奇怪问题。
- Delphi6 调用 C# Dll 时一个编译问题
- 我发现ASP.NET AJAX在客户端调用 WebService时的一个奇怪的问题!问题更奇怪了!!
- 某项目要调用现有的100多个DLL 三 先解决为一个类型做一个跨域的问题
- VC调用Delphi写的dll的一个问题的处理
- HTC ONE里面一个非常奇怪的问题。。。调用kSOAP出错
- Delphi 调用 C# Dll 时一个编译问题 mscorlib_TLB.h Ambiguity between 'String' and 'System::String'
- 问一个调用VC下编写的dll的问题???好怪哦
- dll调用中的一个小问题
- c#下调用VC dll 的一个问题
- OpenCV中调用cvReleaseMemStorage释放CvSeq内存时的一个奇怪问题
- SSM整合搭建过程中的一个奇怪问题,谁能解答?求解答
- java调用C++的dll遇到问题
- hive的一个奇怪的问题