質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

6840閲覧

Visual Studio 2019で64bitプログラムをデバッグすると例外が発生する

Bull

総合スコア986

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

2クリップ

投稿2019/04/18 04:40

編集2019/04/18 07:08

前提・実現したいこと

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 で例外が発生しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

32bit版のライブラリをインポートしているためだと思います。

64bit版Windowsがインストールされたマシンでは、"C:\Program Files"の下に64ビット版の実行ファイルが配置され、"C:\Program Files (x86)"の下に32ビット版の実行ファイルが配置されるのが標準的ですから、C:\Program Files (x86)の下のファイルをimportする記述は32bit版をimportしていると考えられるからです。

投稿2019/04/18 06:02

編集2019/04/18 06:05
coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bull

2019/04/18 07:09

すいません。不正確な情報で質問していました。 タイプライブラリーもエクセルも関係なかったようです。 質問を修正しましたので、よろしければご確認ください。
guest

0

自己解決

原因と言いますか回避方法が分ったので、これで解決とさせて頂きます。大変お騒がせ致しました。
Visual Studio 2019 はリリースされたばかりなので不具合を少し疑っていたのですが、ウィルスバスターでプロジェクトのフォルダーを例外設定することで、デバッグしているときにエラーが発生することはなくなりました。
トレンドマイクロに確認したわけではないのですが、以前にも同じようなこと(例外が発生するモジュールは違います)がありましたので、ウィルスバスターが関連している可能性は高いのかと思っています。

投稿2019/04/19 02:25

Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問