LoginSignup
0
0

More than 1 year has passed since last update.

C++でRCP.dllを利用するプログラムで例外が発生することがあった

Last updated at Posted at 2022-07-04

概要

  • Visual Studio 2015のRCP.dllを利用するC++のプログラムで、プロジェクトの出力先のパスによっては例外が表示されることがあった。

エラー内容

エラーメッセージ

0x03479E52 (RCP.dll) で例外がスローされました (hogehoge.exe 内): 0xC0000005: 場所 0x0400306E の読み取り中にアクセス違反が発生しました

発生個所

以下のreturn pDlg->OnInitDialog();の個所でエラーが発生する

dlgcore.cpp
/////////////////////////////////////////////////////////////////////////////
// AfxDlgProc - does nothing since all messages are handled via AfxWndProc

INT_PTR CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM)
{
	if (message == WM_INITDIALOG)
	{
		// special case for WM_INITDIALOG
		CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd));
		if (pDlg != NULL)
			return pDlg->OnInitDialog();
		else
			return 1;
	}
	return 0;
}

発生条件

次の条件を満たす場合にエラーが発生する

  • アセンブリの出力先を既定値の$(SolutionDir)$(Configuration)\としている
    image.png
  • 出力先の階層が深い(パスが長い?)場合。
    • 次の例は極端な例となる。パスの階層が原因なのか、長さが原因となるかは調査していない
    • 例:C:\Users\user123.domain\source\repos\gitserver\workfolder\projectA\projectA\projectA\projectA\projectA\projectA\projectA\projectA\projectA

対処

方法1

  • アセンブリの出力先を変更する(例:.\execute\VS2015\$(Configuration)\

方法2

  • ソリューション、プロジェクトの配置場所を浅くする
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0