Я написал свой собственный DBX 4 в Delphi 2010 для базы данных Firebird. Это драйвер динамической связи, и он отлично работает с 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;
При отладке этого метода параметр Names and Values содержит поврежденное значение. Я не знаю, в чем проблема. Возможно, существует какая-то проблема с диспетчером памяти с 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".
У вас есть идеи, в чем может быть причина проблемы?