前提・実現したいこと
Visual Studio 2019 をインストールして、昔に作ったプロジェクトを読込んでテストしています。
ほとんどのプログラムは問題なく実行できていますが、特定のプログラムでデバッグ中に例外が発生します。
プログラムはタイプライブラリを使用して Excel を操作するもので、64Bit でビルドしたときのみデバッグ中に例外が発生します。
CoInitialize 関数を呼んだだけで例外が発生しているようです。(タイプライブラリーもエクセルも関係ないかもしれません。)
発生している問題・エラーメッセージ
0x00007FF8A811C09B (ntdll.dll) で例外がスローされました (Test.exe 内): 0xC0000005: 場所 0x0000000000000000 への書き込み中にアクセス違反が発生しました
該当のソースコード
C++
1#include <windows.h> 2#include <iostream> 3 4//Excelを操作するためのタイプライブラリを読みこむ(Excel2010(x64)用) 5#import "C:\Program Files\Common Files\Microsoft Shared\Office14\MSO.DLL" no_auto_exclude auto_rename 6#import "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" 7#import "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" no_auto_exclude auto_search auto_rename dual_interfaces 8int main() 9{ 10 char buff[256]; 11 12 CoInitialize(NULL); //COMを初期化 13 14 Excel::_ApplicationPtr pXL; 15 16 //Excelの起動 17 pXL.CreateInstance(L"Excel.Application"); 18 19 if (pXL) { 20 pXL->Visible[0] = VARIANT_TRUE; //エクセルを表示 21 22 std::cout << "エクセルの起動を確認:"; 23 std::cin.getline(buff, sizeof buff); 24 25 //Excelを終了する 26 pXL->Quit(); 27 pXL.Release(); //COMオブジェクトを解放 28 } else { 29 std::cerr << "エクセルを起動できません\n"; 30 return 1; 31 } 32 33 std::cout << "テストプログラムを終了:"; 34 std::cin.getline(buff, sizeof buff); 35 36 CoUninitialize(); //COMを終了 37}
試したこと
32bit プログラムでは発生しません。
デバッグをしなければ特に問題なく実行できます。
VS2019 でビルドしたプロジェクトを VS2017 でデバッグしても例外は発生しません。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019
Windows 8.1 pro (64bit)
Excel 2010 (64bit)
以下追加します。
以下のソースのように、CoInitialize のみでも例外が発生しました。
タイプライブラリーもエクセルも関係なかったようです。
C++
1#include <windows.h> 2 3int main() 4{ 5 HRESULT hr = CoInitialize(NULL); //COMを初期化 6 if (hr == S_OK) 7 CoUninitialize(); //COMを終了 8}
別のマシン (Windows 10 Home 64bit) では shlwapi.dll で例外が発生しました。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/18 07:09