ホーム » 2025 » 1月

月別アーカイブ: 1月 2025

2025年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 106,058 アクセス


ダブルクリックで開かない

MDI exe で,ドキュメントをダブルクリックして開けないものがある.
exe が起動された後,もう一度ダブルクリックすると開ける.
ドキュメントをダブルクリックで exe は起動するが,データが開かれない.
VC のバージョンによる違いかと思っていたが,他にも何か条件がありそう.
VC6 exe は問題なさそう.VC12 でうまくないことはあった.VC 2022 exe は今は開けない.
いろいろやっていると開けるようになることもある.


この動作をデバッガで確認したいと思ったが…
最初 DebugBreak() を追加してみたが,うまく止められなかった.
それで,次のようにメッセージボックスを表示して停止し,デバッガからアタッチしてテストすることにした.

BOOL CGLSmthApp::InitInstance()
{
	if (!AfxOleInit()) {
		AfxMessageBox(_T("OLE の初期化に失敗しました。")) ;
		return	FALSE ;
		}
#ifdef	_DEBUG
//	DebugBreak();
	AfxMessageBox(_T("Wait")) ;
#endif
	//	...
	}

これでデバッグ自体はできるようにはなったが DDE の動作部分はうまくデバッグできない.


結局どうすれば良いのかはわかっていないが,DDE が動作するときに時間がかかるとうまく開けない?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

レジストリに文字化けしたキー

先日から CDocManager::RegisterShellFileTypes 関係を調べている
以前やった時は,MFC に依存した自前のコードが多かったのと,もう少し使いやすくできないかと…


それでいろいろとやっていると,レジストリの HKCU\Software\Classes\ の下に文字化けしたものができてしまった.
HKCU_Software_Classes___
REG_SZ の (ext)_auto_file となっている.
これは,ドキュメントをダブルクリックして「常に使う」を選んだ時と思うが,はっきりしない.
Win10 環境でも同様?
Win10   HKCU\Software\Classes\ ...


レジストリの直接編集によるファイルの拡張子と関連づけ
Windows 11とレジストリに非ASCII文字を利用するアプリに非互換問題 ~BSoDが発生
特定のレジストリ キーを削除できません。キーの削除中にエラーが発生する


関連付けのレジストリをチェックしましょう

Is this 投稿 useful? Useful Useless 1 of 1 people say this 投稿 is useful.

error D8016 : /clr /RTC1

VC 6 で作成して VC 2022 まで順に上げた MFC プロジェクトで /clr を有効にしてビルド.

22:39 でビルドが開始されました...
1>------ ビルド開始: プロジェクト: GLSmth, 構成: Debug Win32 ------
1>cl : コマンド ライン  error D8016: コマンド ライン オプション '/clr' と '/RTC1' は同時に指定できません
1>プロジェクト "GLSm143.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 成功 0、失敗 1、最新の状態 0、スキップ 0 ==========
=========== ビルド は 22:39 で完了し、00.707 秒 掛かりました ==========

通常はプロジェクトの設定で「C/C++」-「コード生成」-「基本ランタイムチェック」で「既定」を選択すれば良い.
「C/C++」-「コード生成」-「基本ランタイムチェック」で「既定」
が,今回はそれだけではエラーのまま.


vcxproj をエディタで開いてみると EnableFastChecks という部分が存在している.

    <ClCompile Include="GLSmth.cpp">
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
    </ClCompile>

「ソリューション エクスプローラー」ですべての cpp を選択して,「既定」などを選択する必要がある.
すべての cpp を選択して,「基本ランタイムチェック」で「既定」に

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

error C3010: ‘return’: OpenMP

以前,OpenMP を有効にしないで使用していたコード.
最近のコードで,OpenMP を有効にしたプロジェクトが増えてきた.
それでビルドしていると C3010 のエラーになってしまう.


関連する部分を,単体テスト用の cpp に張り付けてビルド.
OpenMP   error  C3010

11:21 でビルドが開始されました...
1>------ ビルド開始: プロジェクト: C_drv, 構成: Debug Win32 ------
1>C_drv.cpp
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(60,36): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(64,45): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(67,4): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(69,3): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>プロジェクト "C_drv.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 成功 0、失敗 1、最新の状態 0、スキップ 0 ==========
=========== ビルド は 11:21 で完了し、06.452 秒 掛かりました ==========

OpenMP のコードの部分を一つの関数とすることで対応.

bool	NET_is_valid	(LPCTSTR path)
{
	tstring	net_root = ::Path_Get_net_root(path) ;
	bool	is_valid = false ;
	#ifdef	_OPENMP
		#pragma	omp	critical	(NET_is_valid)
	#endif
	{
		is_valid = ::NET_is_valid_critical(net_root) ;
		}
	return	is_valid ;
	}

何故か,VC 2015 と 2017 ではエラーにならなかった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win11 コンソール AP で DC

今まで Win10 をメインで使用していたので気づかなかったが…
Win10 でうまく使えていた GDI の描画が Win11 ではうまく行われない?
どうも,デフォルトの設定では新しい「ターミナル」が使用されることによるみたい.
「Windows コンソール ホスト」を選択
ターミナルの「設定」から入って「Windows コンソール ホスト」を選択して「保存」する.


これで正しく表示されるようになった.
Win11 コンソール AP で GDI 描画

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

シンボリックリンクがない?

先日から ZIP を扱うコードを書いている.
いつも exe を作成するのは,VC 6 と VC 2015 以降が多い.
今回は,幾つかの環境(Win7 など)での動作を確認したかったので,VC 9 でビルドしたものもテストしていた.
Win10 環境では特に問題なかったが,Win11 環境でうまく機能しない動作がある.
VC 6 や VC 8 でビルドしたものは OK .また,VC 2015 以降も良さそう.
リリース版とデバッグ版での違いはなさそう.
VC 9 と VC 10 でビルドしたものがうまくないことがわかった.

VC 9 で,デバッガで追いかけていくと,stat の _tsopen_s で見つからないとなってしまう.
VC 8 以前ではその部分はなく,VC 11 以降では _O_OBTAIN_DIR が設定されている.
VC 8 9 11  stat

検索するとシンボリックディレクトリリンクがサポートされていないみたい.
FIX”_stat”または”_wstat”関数が失敗した ENOENT エラーとディレクトリのシンボリック リンクのパスは、Visual C++ 2010 アプリケーションに渡されたとき
Update: “_stat” oder “_wstat”-Funktion nicht mit ENOENT Fehler, wenn ein symbolische Verknüpfung Verzeichnispfad zu Visual C++ 2010 Anwendung übergeben wird
“_stat ファミリ” の関数呼び出しでは、Visual Studio 2013、2012、または 2010 の C ランタイム ライブラリ関数のシンボリック ディレクトリ リンクはサポートされていません
Function calls of “_stat-family” do not support Symbolic Directory Links for C Runtime Library functions from Visual Studio 2013, 2012, or 2010
対応は VC 2015 以降を使用する必要がある?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

fatal error C1001

MFC SDI プロジェクトを /clr を有効にして,ビルド.
さらに OpenMP を有効にしてビルドすると …

ビルドを開始しました...
1>------ ビルド開始: プロジェクト: MBPV, 構成: Release Win32 ------
1>MBPVDc.cpp
1>enumfile.hxx MessageBar  No Support
1>BDocCSV           Draw   No Support
1>_WIN32            1
1>_WINDOWS          1
1>_OPENMP           200203
1>_UNICODE          1
1>_MSC_VER          1929
1>_MSC_FULL_VER     192930157
1>_MFC_VER          0x0E00
1>_ATL_VER          0x0E00
1>__CLR_VER         40809290
1>_MSVC_LANG        201402L
1>WINVER            0x0A00
1>__cplusplus_cli   200406L
1>_AFXDLL           1
1>_M_CEE            001
1>_MANAGED          1
1>__DATE__          "Jan 10 2025"
1>__TIME__          "13:39:57"
1>UndoRedo::UpdateUI       No Support ODMenu
1>T:\Develop\_.SRC\__CPR_\enumfile.hxx(597): fatal error C1001: 内部コンパイラ エラーが発生しました。
1>(コンパイラ ファイル 'D:\a\_work\1\s\src\vctools\Compiler\Utc\src\p2\main.c'、行 213)
1> この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
1>可能な場合、再現手順をこちらに入力してください: https://developercommunity.visualstudio.com
1>詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを
1>選択するか、サポート情報ヘルプ ファイルを参照してください
1>  CL!RaiseException()+0x62
1>  CL!RaiseException()+0x62
1>  CL!InvokeCompilerPass()+0xc17f1
1>  CL!CloseTypeServerPDB()+0x16cc3
1>プロジェクト "MBPV142.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

MFC /clr OpenMP で C1001 内部コンパイラ エラーが発生しました
デバッグビルドは通る.また,/clr や OpenMP を外すと通る.
VC 2017 や 2022 などでは問題ない.
何かの更新で解消されるかもしれないので,このままとする.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

MFC + System:: … ::ZipFile

先日から作成しているテスト exe で,ZIP に圧縮する動作を…
主要な exe では,izip.exe を呼出したり,シェルの機能を利用している.
ただ,同期のタイミングなど少し時間がかかるので,試しに直接呼出す方法に変更.


プロジェクトの設定で「共通言語ランタイム サポート (/clr)」に.
「共通言語ランタイム サポート (/clr)」に
そのままビルドすると
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/ZI’ と ‘/clr’ は同時に指定できません
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/clr’ と ‘/Gm’ は同時に指定できません
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/clr’ と ‘/RTC1’ は同時に指定できません
T:\…\zip_CLI.hxx(16,9): fatal error C1107: アセンブリ ‘System.IO.Compression.dll‘ がみつかりませんでした: /AI または LIBPATH 環境変数を使用してアセンブリ検索パスを指定してください。
L:\Document\…\ComPrj01.cpp : fatal error C1128: セクションの数がオブジェクト ファイル形式の制限を超えています: /bigobj と共にコンパイルしてください
「プログラム データベース (/Zi)」に.
/Gm と /RTC1 は「<親またはプロジェクトの既定値から継承>」に.
「追加の #using ディレクトリ」を「C:\Windows\Microsoft.NET\Framework\v4.0.30319」に.
「C/C++」-「コマンド ライン」の「追加のオプション」に「 /bigobj 」の追加.


これでビルドはできる様になったが,あまり見慣れない warning が…
ComPrj01.obj : warning LNK4248: 未解決の typeref トークン (0100001B) (‘_TREEITEM’) です。イメージを実行できません。
ComPrj01.obj : warning LNK4248: 未解決の typeref トークン (0100001F) (‘GLUtesselator’) です。イメージを実行できません。
これに関しては,ちょっとわからず.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

error LNK2001: unresolved …

空のコンソール AP プロジェクトを作成して,_tmain を含む cpp を追加してビルドすると

--------------------Configuration: t_MBP - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
c:\Temp\MBP\t_MBP\Debug.060/t_MBP.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

t_MBP.exe - 3 error(s), 0 warning(s)

この cpp では MFC を使用しているので,「共有 DLL で MFC を使用」に変更する.
「共有 DLL で MFC を使用」に変更

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.