Настройка базового Esent для c ++ примера - PullRequest
1 голос
/ 15 марта 2011

Я пробую этот отправленный пример для разработчиков на С ++. У меня установлена ​​последняя версия Windows SDK, и я использую Dec C ++. У меня есть файлы include на C: \ Dev-Cpp \ include. У меня естьпопытался скопировать esent.h в мой каталог include, но я все еще получаю очень много ошибок. Вот и весь код.

#undef   JET_VERSION 
#define  JET_VERSION 0x0501 
#include <stdio.h> 
#include <string.h> 
#include <esent.h>

int main(int argc, char * argv[]) {
       JET_INSTANCE instance; 
       JET_SESID sesid;
       JET_DBID dbid;
       JET_TABLEID tableid;

       JET_COLUMNDEF columndef = {0};
       JET_COLUMNID columnid;

       // Initialize ESENT. Setting JET_paramCircularLog to 1 means ESENT will automatically
       // delete unneeded logfiles. JetInit will inspect the logfiles to see if the last
       // shutdown was clean. If it wasn't (e.g. the application crashed) recovery will be
       // run automatically bringing the database to a consistent state.
       Call(JetCreateInstance(&instance, "instance"));
       Call(JetSetSystemParameter(&instance, JET_sesidNil, JET_paramCircularLog, 1, NULL));
       Call(JetInit(&instance));
       Call(JetBeginSession(instance, &sesid, 0, 0));

       // Create the database. To open an existing database use the JetAttachDatabase 
       // and JetOpenDatabase APIs
       Call(JetCreateDatabase(sesid, "edbtest.db", 0, &dbid, JET_bitDbOverwriteExisting));

       // Create the table. Meta-data operations are transacted and can be performed concurrently.
       // For example, one session can add a column to a table while another session is reading
       // or updating records in the same table.
       // This table has no indexes defined, so it will use the default sequential index. Indexes
       // can be defined with the JetCreateIndex API.
       Call(JetBeginTransaction(sesid));
       Call(JetCreateTable(sesid, dbid, "table", 0, 100, &tableid));
       columndef.cbStruct = sizeof(columndef);
       columndef.coltyp = JET_coltypLongText;
       columndef.cp = 1252;
       Call(JetAddColumn(sesid, tableid, "column1", &columndef, NULL, 0, &columnid));
       Call(JetCommitTransaction(sesid, JET_bitCommitLazyFlush));

       // Insert a record. This table only has one column but a table can have slightly over 64,000
       // columns defined. Unless a column is declared as fixed or variable it won't take any space
       // in the record unless set. An individual record can have several hundred columns set at one
       // time, the exact number depends on the database page size and the contents of the columns.
       Call(JetBeginTransaction(sesid));
       Call(JetPrepareUpdate(sesid, tableid, JET_prepInsert));
       char * message = "Hello world";
       Call(JetSetColumn(sesid, tableid, columnid, message, strlen(message)+1, 0, NULL));
       Call(JetUpdate(sesid, tableid, NULL, 0, NULL));
       Call(JetCommitTransaction(sesid, 0));    // Use JetRollback() to abort the transaction

       // Retrieve a column from the record. Here we move to the first record with JetMove. By using
       // JetMoveNext it is possible to iterate through all records in a table. Use JetMakeKey and
       // JetSeek to move to a particular record.
       Call(JetMove(sesid, tableid, JET_MoveFirst, 0));
       char buffer[1024];
       Call(JetRetrieveColumn(sesid, tableid, columnid, buffer, sizeof(buffer), NULL, 0, NULL));
       printf("%s", buffer);

       // Terminate ESENT. This performs a clean shutdown.
       JetCloseTable(sesid, tableid);
       JetEndSession(sesid, 0);
       JetTerm(instance);
       return 0;
}

Что мне нужно сделать, чтобы мой код успешно компилировался?.

Вот некоторые из ошибок компилятора:

g++.exe "C:\dev\esent-example.cpp" -o "C:\dev\esent-example.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
In file included from C:/Dev-Cpp/include/specstrings.h:11,
 from C:/Dev-Cpp/include/esent.h:27,
 from C:\dev\esent-example.cpp:5:
C:/Dev-Cpp/include/sal.h:23:28: linux/spinlock.h: No such file or directory
C:/Dev-Cpp/include/sal.h:25:21: asm/pal.h: No such file or directory 

1 Ответ

1 голос
/ 15 марта 2011

API Extensible Storage Engine достаточно стар.Документы для него были сняты с производства, кажется, он устарел еще в 2001 году. Файл заголовка по-прежнему доступен в SDK только для поддержки устаревшего кода.

Я могу получить ваш код, созданный с помощью Visual Studio.Если вы действительно хотите добиться этого, то будет разумно использовать компилятор MSVC и MSFT-версию Windows SDK.Вы можете скачать версию Visual Studio C ++ Express бесплатно, в ней должно быть все необходимое для ее создания.Тратить время на это не очень хорошая идея.

...