Я написал собственный 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".
Есть ли у вас какие-либо идеи, что может послужить причиной проблемы?