【发布时间】:2019-03-18 19:48:12
【问题描述】:
我在 Delphi 2007 上使用 Datasnap。在一些特定的机器上,当用户尝试打开应用程序时,他收到“加载 Midas.DLL 错误”错误并且应用程序崩溃。
我永远无法确定在什么情况下会发生这种情况,因为我总是将 MIDAS.DLL 与我的应用程序一起分发,并且此文件始终与应用程序 EXE 位于同一文件夹中。
我知道我可以使用 MidasLib 来避免这种情况,但我不能这样做,因为我的应用程序使用了加密 EXE 的破解保护,最终与嵌入式 Midaslib 不兼容。所以 Midaslib 对我来说不是一个选择。
所以我要做的是在应用程序崩溃之前运行一个小测试,以检查是否在应用程序崩溃之前加载了 Midas.DLL,这样我就可以在应用程序崩溃之前积极主动地注册 DLL。
这是我尝试过的:
function testMidas : boolean;
var c : tclientdataset;
begin
try
c := tclientdataset.create(nil);
c.loadfromfile('c:\somefile.dat');
c.free;
result := true;
// everything fine
except
result := false;
// problem, do something to fix
end;
end;
这个函数有效,如果没有加载 Midas.dll 会失败,结果为 false,所以我可以做一些事情来解决这个问题。但我想得到相同的结果而不必调用'loadfromfile'。只有创建 TClientDataset 不会产生异常。
有什么想法吗?
谢谢!
【问题讨论】:
-
GetModuleHandle('midas.dll')会告诉您 DLL 当前是否已在调用进程中加载。顺便说一句,当LoadFromFile()失败时,您会泄漏TClientDataSet。 -
哈哈,没错,我也会 .free 除了:P
-
最好改用
try..finally
标签: delphi delphi-2007 datasnap