ホーム » 2025

年別アーカイブ: 2025

2025年2月
 1
2345678
9101112131415
16171819202122
232425262728  

カテゴリー

アーカイブ

ブログ統計情報

  • 106,121 アクセス


2D 配列の配列の ::PolyPolygon

2 年位前に書いた,2D 配列を表示するコード.

BOOL	PolyPolygon	(HDC hDC,const v_Vd2A& v_v2a)
{
	std::vector <POINT>	points ;
	std::vector <int>	counts ;
	for (size_t index=0 ; index<v_v2a.size() ; index++) {
		const	Vd2A&	v2a = v_v2a[index] ;
		for (size_t p_index=0 ; p_index<v2a.size() ; p_index++) {
			Vd2	vd2  = v2a[p_index] ;
			POINT	pt2  = {  long(vd2.x) , long(vd2.y)  } ;
			points.push_back(pt2) ;
			}
		counts.push_back(int(v2a.size())) ;
		}
	return	::PolyPolygon(hDC,&points[0],&counts[0],int(counts.size())) ;
	}

それ以前は,コンソール AP で DC を使うことを考えてなかった.
また最近は,コンソール AP での GDI 描画もしていなかった.


今やろうと思っていることで,個人的なコードを調べていて

{
	HWND	hWnd = ::GetConsoleWindow() ;
	{
		vv_PLF	d_plf = vvplf ;
		{
			d_plf = ::PLF_Translate(d_plf,Vd3(200)) ;
			}
		::ClearWindow(hWnd) ;
		HDC	hDC  = ::GetDC(hWnd) ;
		{
			v_Vd2A	v_v2a = ::ToVd2A(d_plf) ;
			::PolyPolygon(hDC,v_v2a) ;
			}
		::ReleaseDC(hWnd,hDC) ;
		}
	}

こんな感じで使える.
::PolyPolygon  ( HDC , v_Vd2A )
WebGL での 3D データ表示


やりたかったのは,三角形分割で正しくできたかどうか?

	Vd3A	v3a = ::ToVd3A(pts) ;
	{
		Vd3 	nv  = ::V3_GetNormal(v3a) ;
		std::tout << nv.Length() << std::endl ;
		}
	{
		v_Vd3A	t_a = ::V3_Triangulation(v3a) ;
		Vd3 	n_v ;
		for (size_t index=0 ; index<t_a.size() ; index++) {
			Vd3A	tri = t_a[index] ;
			Vd3 	tnv = ::V3_GetNormal(tri) ;
			n_v += tnv ;
			}
		std::tout << n_v.Length() << std::endl ;
		}

n点からなる多角形の面積を求める
多角形の面積を求める
多角形の面積(凸じゃなくても可)は外積で求まる

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

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

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.