我必須創建一個SQLite數據庫使用System.Data.SQLite和使用C++/CLI但我遇到問題。不幸的是,使用C#不是一種選擇,如果它沒有問題的話。 (請不要建議我不要使用C++/CLI,它不是這個項目的一個選項。)預處理器使函數名稱unaccessabel
在C#中,下面的代碼沒有任何問題。
using System.Data.SQLite;
void CreateDb(String file)
{
SQLiteConnection.CreateFile(file);
}
C++/CLI中的等效代碼並非沒有問題。
using namespace System::Data::SQLite;
void CreateDb(System::String ^file)
{
SQLiteConnection::CreateFile(file); // error C2039
}
爲C2039確切的錯誤TXT是: //錯誤C2039: 'CreateFileA的':是不是成員 '系統::數據:: SQLite的:: SQLiteConnection'
如果我坐在的CreateFile的定義,仔細一看,我得到以下選擇
#define CreateFile CreateFileW - c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\WinBase.h(9292)
#define CreateFile CreateFileA - c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\WinBase.h(9294)
導致以下行WINBASE.H
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
Microsoft SDK混淆了我需要的確切名稱,而SQLite不提供給我CreateFile [AW]版本。 所以我在調用SQLiteConnection.CreateFile(文件)的代碼之前試過這個,我這樣做是孤立的,這樣其他代碼就會受到它的影響。
#ifdef CreateFile
#undef CreateFile
#endif
它解決了我的問題(目前),但這有多安全?
有沒有更好的方法來解決這個問題?
您的建議是非常感謝。