私の問題は、タイトルのエラーメッセージです。
COM object that has been separated from its underlying RCW cannot be used.
グーグルしようとしましたが、デストラクタ/リリースオブジェクトに関連する解決策しか見つかりませんでした。それは私がやりたいことではありません。
まず、私のコードは次のとおりです。
String^ filename="c:\\wb.xlsx";
Microsoft::Office::Interop::Excel::Application^ exApp= gcnew Microsoft::Office::Interop::Excel::ApplicationClass();
exApp->Visible=false;
exApp->Workbooks->Open(filename, 2, true, Type::Missing, Type::Missing, Type::Missing, true, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing);
Worksheet^ exWss;
for (int x = 0; x <= checkedListBox1->CheckedItems->Count - 1; x++){
for (int p=0; p<checkedListBox1->Items->Count; p++){
if (checkedListBox1->CheckedItems[x]->ToString()->Equals(checkedListBox1->Items[p]->ToString())){
p++;
exWss = safe_cast<Worksheet^> (exApp->ActiveWorkbook->Sheets[p]);
}
}
}
要するに:私はチェックリストボックスを持っています、コードのこの部分は必要なものが選択されたときに実行されます。チェックリストボックスには、Excelブックのさまざまなシートが一覧表示されます。チェックリストボックスで選択した項目に従って、ブックからシートを選択しようとしています。
最後のコード行(exWss = safe_cast(exApp-> ActiveWorkbook-> Sheets [p]);)で、前述のエラーメッセージが表示されます。
マーシャルの解放がそのような問題を引き起こす可能性があることを私は見ました。別の関数では、Marshal.Releasecomobjectを実行していますが、完全に分離されており、それがなくても同じエラーが発生します。
任意のアイデアをいただければ幸いです。