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

Я написал свой собственный 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".

У вас есть идеи, в чем может быть причина проблемы?

23
задан Chimera 13 July 2012 в 22:15
поделиться