Delphi - Ошибка при использовании TTable в DataModule в DLL - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть приложение, которое отлично работает ... Портирование его должно быть реализовано как DLL. У меня есть модуль данных с моей базой данных и компонентами TTable ... В режиме разработки для базы данных установлено значение «Активный». Таблицы указывают на базу данных, они активны. Я могу щелкнуть правой кнопкой мыши по таблицам, зайти в редактор полей и увидеть все столбцы, поэтому я знаю, что структура / свойства настроены нормально ...

Проблема во время выполнения ... Это дает мне AV на этой линии ...

 if MyDataModule.DB1.Connected = True then
  ShowMessage('Active')
   else 
 ShowMessage('Not Active');

Я видел в Интернете намеки на то, что нужно что-то особенное, чтобы использовать модуль данных внутри DLL, но у меня ничего не получается.

Конкретное сообщение об ошибке:

Нарушение прав доступа по адресу 06D4E22E в модуле «DocAssistCom.dll» Чтение адреса 0000070

1 Ответ

4 голосов
/ 08 декабря 2011

Вы должны убедиться, что MyDaModule действительно создан, затем, что MyDataModule.DB1 также создан, прежде чем даже пытаться использовать MyDataModule.DB1.Connected.

if Assigned(MyDataModule) then
  if Assigned(MyDataModule.DB1) then
    if MyDataModule.DB1.Connected = True then
      ShowMessage('Active')
    else 
      ShowMessage('Not Active')
  else
    ShowMessage('MyDataModule.DB1 not assigned')
else
  ShowMessage('MyDataModule not assigned');

Но они все еще могут быть созданы не полностью иготов, когда вы пытаетесь использовать их.

Таким образом, вместо распространения ShowMessage вызовов, я бы предпочел использовать OutputDebugstring и для отладки DLL в IDE , чтобы увидеть путь к коду ...

Примечание: Я не знаю, с какими версиями Delphi и Windows вы работаете, но помните, что для TTable требуется BDE (что в настоящее время довольно устарело) ...

...