Я использую Datasnap на Delphi 2007. На некоторых конкретных машинах, когда пользователь пытается открыть приложение, он получает ошибку «Ошибка загрузки 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 не загружен и результат будет ложным, поэтому я могу что-то сделать, чтобы решить проблему. НО я хочу получить тот же результат без вызова «loadfromfile». Только создание TClientDataset не приведет к возникновению исключения.
Любые идеи, пожалуйста?
Спасибо!
GetModuleHandle('midas.dll')
сообщит вам, загружена ли в данный момент DLL в вызывающем процессе или нет. Кстати, когдаLoadFromFile()
терпит неудачу, вы теряетеTClientDataSet
. - person Remy Lebeau   schedule 18.03.2019try..finally
- person Remy Lebeau   schedule 19.03.2019