2010-11-24 1 views
23

Я написал собственный DBX 4 в Delphi 2010 для базы данных Firebird. Драйвер является драйвером dynalink, и он отлично работает с TSQLConnection.Ошибка Encounter с использованием DataExplorer.exe для подключения к домашнему драйверу DBX4

В последнее время я стараюсь использовать 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". 

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

+0

Это гораздо реже проблема .NET, чем проблема в DataExplorer или собственный код. – stephbu 2011-02-06 19:33:13

ответ

1

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

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

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