2009-05-06 6 views
0

管理対象コードとアンマネージコードの混在に問題があります。私は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)例外。両者を完全に分離させる方法はありますか?

答えて

1

実際には、CLRが明らかにCLR例外になっているWindows例外です。アクセス違反があります。あなたができるべきことは、Visual Studioで、[デバッグ]> [例外]に進み、アクセス違反で中断してください。これにより、ネイティブコードのどこがひどく間違っているのかを確認し、問題の診断を開始することができます。

+0

ありがとうございました!例外は、私のsqlite.cファイルの18706行にスローされます。これを修正する方法を試してみます。 –

関連する問題