Member 14573258 Ответов: 1

Как читать файл EDB на языке C++


Я пишу программу для чтения файла edb на языке c++
Я попробовал с esent windows library и получил ошибку "размер страницы базы данных не соответствует движку" на "JetAttachDatabase"

И я также попробовал библиотеку "libesedb", но я не могу понять, как ее использовать.

Есть ли другой способ прочитать edb на c++ или как я могу исправить ошибки

Что я уже пробовал:

err = ::JetInit(0);
if(JET_errSuccess != err) return err;

JET_SESID sessionID = JET_sesidNil;
err = ::JetBeginSessionA(0, &sessionID, 0, 0);
	
if(JET_errSuccess != err) {
  ::JetTerm(0);
  return err;
}
	
err = JetAttachDatabase(
  sessionID,
  "1.edb",
  0
); // error -1213 "The database page size does not match the engine"

1 Ответов

Рейтинг:
0

Garth J Lancaster

Здесь есть дискуссия о том, что *может* помочь (как бы мне ни было неприятно указывать кому-то в этом направлении гнезда гадюк) edb - Esent database engine ограничен определенными размерами страниц? - переполнение стека[^]


Member 14573258

Спасибо
Есть ли какой-нибудь пример?

Garth J Lancaster

Там действительно трудно найти информацию ... похоже, ты сделаешь что-то вроде этого

JET_INSTANCE instance;
JetCreateInstance(&instance, "instance"));

JetSetSystemParameter (&instance,
                               JET_sesidNil,
                               JET_paramRecovery,
                               NULL,
                               (JET_PCWSTR)"Off”);
а это значит твоя линия
err = ::JetInit(0);
становится
err = ::JetInit(&instance);


Вот ссылки, которые я нашел
https://docs.microsoft.com/en-us/windows/win32/extensible-storage-engine/extensible-storage-engine
https://stackoverflow.com/questions/56278300/why-does-jetattachdatabase-return-error-550
https://stackoverrun.com/ru/q/8475032

Garth J Lancaster

Эта статья здесь также может помочь в общих чертах https://www.codeproject.com/Articles/52715/Extensible-Storage-Engine