Подтвердить что ты не робот

Ошибка Encounter с использованием DataExplorer.exe для подключения к домашнему драйверу DBX4

Я написал собственный DBX 4 в Delphi 2010 для базы данных Firebird. Драйвер является драйвером dynalink, и он отлично работает с TSQLConnection.

Недавно я попытался использовать DataExplorer.exe, выпущенный с Delphi 2010, и столкнулся с ошибкой:

"Attempted to read or write protected memory.
 This is often an indication that other memory is corrupt".

После трассировки исходного кода я обнаружил, что причиной может быть следующий метод экспорта:

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;

При отладке этого метода параметр Имена и Значения содержат поврежденное значение. Я не знаю, в чем причина проблемы. Возможно, есть проблема с диспетчером памяти с DataExplorer.exe(проблема с .net?)

После некоторых проб и ошибок, я пытаюсь изменить метод следующим образом:

type
  TWideStringArray2 = array of PChar;

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray2;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;

На этот раз ошибка исчезла, и вскоре после выхода из этого метода снова повторится эта же ошибка.

"Attempted to read or write protected memory.
This is often an indication that other memory is corrupt".

Есть ли у вас какие-либо идеи, что может послужить причиной проблемы?

4b9b3361

Ответ 1

Похоже, у вас проблемы с распределением памяти. Вы используете SimpleShareMem в будущем?

http://docwiki.embarcadero.com/CodeExamples/en/SimpleShareMem_Sample - описывает, как его использовать.

http://www.codexterity.com/memmgr.htm - также содержит некоторые сведения о распределении памяти, но с более старыми подходами с использованием модуля FastSharemem.