管理対象コードとアンマネージコードの混在に問題があります。私はVista x64 SP1の下でVisual Studio 2008の単一のソリューションで2つのプロジェクトを作成しました。そのうちの1つにCLRサポートがなく、静的ライブラリです。私の2番目のプロジェクトは、CLRを有効にして実行可能ファイルとしてコンパイルされます。これは、最初の静的ライブラリに依存し、WinFormsイベントを渡します。管理された実行可能ファイルのアンマネージライブラリで管理例外が発生する
デバッグなしでアプリケーションを起動すると、例外が発生します。例外の情報はここに入れます:http://pastebin.com/f46ad1211。私は取得していますなぜ私が見ることができない
void manager::init() // <-- Called from the .exe project
{
this->log.open("C:\\development\\log.txt");
this->storage = storage_manager(&(this->log), &(this->settings));
this->storage.load_settings();
}
&
void storage_manager::load_settings()
{
this->error_check(sqlite3_open("settings.db", &(this->db_settings_p)));
sqlite3_stmt* read_settings;
this->error_check(sqlite3_prepare_v2(this->db_settings_p, "SELECT name, value FROM settings", 1024, &read_settings, NULL));
int step_code;
std::string name;
std::string value;
while(true)
{
step_code = sqlite3_step(read_settings);
if(step_code == SQLITE_DONE)
{
break;
}
else if(step_code == SQLITE_ROW)
{
name = std::string(reinterpret_cast<const char*>(sqlite3_column_text(read_settings, 0)));
value = std::string(reinterpret_cast<const char*>(sqlite3_column_text(read_settings, 1)));
(*(this->settings))[name] = value;
}
else
{
this->error();
}
}
sqlite3_reset(read_settings);
sqlite3_finalize(read_settings);
}
&
void storage_manager::error_check(int rc)
{
if(rc)
{
this->error();
}
}
void storage_manager::error() //Sure of error
{
std::string error_msg;
error_msg = "Storage Manager: SQLite Error (";
error_msg += sqlite3_errcode(this->db_p);
error_msg += ") - ";
error_msg += sqlite3_errmsg(this->db_p);
this->log->write(error_msg.c_str(), error_msg.length());
this->log->flush();
}
:ここ
が実行され、管理対象外のlibのコードです管理されていないライブラリのmanaged(System.BlahBlahBlah)例外。両者を完全に分離させる方法はありますか?
ありがとうございました!例外は、私のsqlite.cファイルの18706行にスローされます。これを修正する方法を試してみます。 –