Iwao myds

dev.mish.work へ移行しました.

この画面は、簡易表示です

VC

CWinApp::m_pszAppName

今更の内容ではあるが…
MFC の SDI や MDI で,アプリケーション名は,作成したプロジェクト名?になる.
ダイアログベースで作成した場合は exe 名になってしまう.
困ることがあるのが exe 名を変更した場合のレジストリキー.


CWinApp::m_pszAppName はヘルプにある様に,AFX_IDS_APP_TITLE がなければ exe 名となる.
CWinApp:: m_pszAppName
コードは MFC 6 のものだが,MFC 14.3 でも同様.
CWinApp::SetRegistryKey で m_pszAppName を利用している.
exe 名と異なるものを使用する場合,リソースの AFX_IDS_APP_TITLE を変更するか,なければ追加すれば良い.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VC 2022 ビルドでエラー

VC 2022 でビルドしようとすると,次の様なエラー.
—————————
Microsoft Visual Studio
—————————
オブジェクト参照がオブジェクト インスタンスに設定されていません。
—————————
OK
—————————
オブジェクト参照がオブジェクト インスタンスに設定されていません。
プロジェクトの設定などを見直しても特に怪しい部分はなさそう.
ビルド時に生成される幾つかのファイルを手動で削除しても特に変わらない.


さっきまで動作していた VC 2019 も同様のエラーに.
以前うまく動作しているはずのプロジェクトをコピーして,ビルドしようとしても同様.
こうなると,プロジェクトの設定ではなく,環境っぽい.


PC を再起動してうまく動作する様になった.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


…\System32\MicrosoftEdgeCP.exe

…\System32\MicrosoftEdgeCP.exe が存在するのに,stat などでうまく読み取れない.


ファイルが存在しているかどうかをチェックするために,CFileStatus などを利用している.
CFileStatus::GetStatus() で,幾つかのファイルが正しくチェックできない.
コードをデバッガで追いかけていくと,::FindFirstFile で INVALID_HANDLE_VALUE となってしまう.
検索 すると次の様なものがあった.
FindFirstFile関数はx64環境においてシステムファイルが検索できない?
x86 の場合次のものを呼出して切替える必要があるみたい.
Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection
File System Redirector
FindFirstFile ... INVALID_HANDLE_VALUE


今回 ::GetFileVersionInfo から始まって いろいろとあったのでメモ.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VC 14 以降での stat.c の場所

VC 14 以降,<sys/stat.h> 関係が大きく変更されている?
CFileStatus でアサート


今回 stat 関数内をデバッグしようとしていて,ソースの場所がすぐにわからなかった.

#ifdef		_MSC_VER
#define		s_stat		struct	_stati64
#define		TSTAT		_tstati64
#else
#define		s_stat		struct	stat
#define		TSTAT		stat
#endif

VC 12 以前は,(VS)\VC\crt\src\ 以下に存在する.


VC で,#include <sys/stat.h> としている所を「右クリック」-「ドキュメント<sys/stat.h>を開く」.
その位置を幾つか上に行って,Include の並びに Source があり,その対応する所に存在する.
VC 14 以降の C ランタイムのソースの場所
VC 2015 以降のどれかで対応がつくと,それ以外でも対応したもの(10.0.?????.0)が開かれる?


この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VC 2019 以降の include

%LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props がない?


次の所は以前まとめたもの.VC 2010 以降は,これが引き継がれるものと思っていた.
VC include lib のパス
私の環境の VC 2022 で確認すると,ちゃんと引き継がれている.
VC 2022 プロパティ マネージャー
検索すると VC 2019 から Microsoft.Cpp.Win32.user.props は使用されなくなった?
Microsoft.Cpp.Win32.user.props file missing
Visual Studio プロジェクトの設定を共有または再利用する


VC Linux の include 設定

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • カテゴリー:

vector<long> などを文字列に

std::vector<long> の文字列への変換.
何年も前に書いたコードで,使い方を忘れているのでそのまとめ.


次の様な関数を用意している.
template <class VX> tstring Vx_To_tstring(const VX& vx,LPCTSTR sp=_T(" "))
vxx_tstr.hxx  ::Vx_To_tstring
次の様な使い方で long の配列を文字列へ変換できる.
tstring vl_str = ::Vx_To_tstring<v_long>(long_ary) ;


クラスの配列のダンプ

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


C4995: ‘gets’: 名前が避けられた …

.lnk 関係の ResolveIt をやっていて strsafe.h を使用すると…

1>------ ビルド開始: プロジェクト: T_path_l, 構成: Debug Win32 ------
1>コンパイルしています...
1>T_paht_l.cpp
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cstdio(33) : warning C4995: 'gets': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cstdio(37) : warning C4995: 'sprintf': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cstdio(40) : warning C4995: 'vsprintf': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cstring(20) : warning C4995: 'strcat': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cstring(21) : warning C4995: 'strcpy': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cwchar(34) : warning C4995: 'swprintf': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cwchar(35) : warning C4995: 'vswprintf': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cwchar(37) : warning C4995: 'wcscat': 名前が避けられた #pragma として記述されています。
1>c:\program files (x86)\microsoft visual studio 8\vc\include\cwchar(39) : warning C4995: 'wcscpy': 名前が避けられた #pragma として記述されています。
1>マニフェストをリソースにコンパイルしています...
1>リンクしています...
1>マニフェストを埋め込んでいます...
1>T_path_l - エラー 0、警告 9
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========

warning C4995: 'gets': 名前が避けられた #pragma として記述されています。
コンパイラの警告 (レベル 3) C4995
ドキュメントにある様に,次を追加して対応.
#pragma warning(disable : 4995)
#pragma	warning(disable : 4995)

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • カテゴリー:

「ダイアログ バー」の追加

Win10 環境で VC 6 を使えるようにはなったが,「コンポーネントギャラリ」はうまく機能しないみたい.
VC 6 コンポーネント ギャラリ
今回利用しようとしたのは「ダイアログ バー」.ヘルプの内容は次の様なもの.


ダイアログ バー コンポーネント : 挿入結果
ダイアログ バー コンポーネントを挿入すると、プロジェクト コードに次の変更が加えられます。

  • プロジェクトのリソース スクリプトにダイアログ テンプレート リソースが追加されます。このダイアログ テンプレートにコントロールを追加するには、Visual C++ のダイアログ エディタを使用できます。
  • 指定したフレーム ウィンドウ クラスに、CDialogBar 型のメンバ変数の宣言が追加されます。デフォルトの変数名 m_wndMyDialogBar は変更できます。ダイアログ バーの初期プロパティ (標準では可視、ドッキング可能など) も指定できます。
  • フレーム ウィンドウの OnCreate メンバ関数に初期化コードが追加されます。この初期化コードは、CDialogBar::Create を呼び出して、ダイアログ バーのドッキング オプションを設定します。また、ダイアログ バーの表示/非表示に関する初期化もここで行います。
  • ダイアログ バーの表示/非表示に関するメニュー項目のサポートが追加されます。

ダイアログ バー コンポーネントを挿入しても、ダイアログ バーの表示/非表示を切り替えるためのメニュー項目はメニュー リソースに追加されません。このメニュー項目はメニュー エディタを使用して手作業で追加する必要があります。コンポーネントは、メニュー項目の追加手順を記述した “TODO” コメントを追加します。このコメントは、ダイアログ バーを追加したフレーム クラスの OnCreate 関数に挿入できます。

  • 2 つの関数のハンドラがフレーム ウィンドウ クラスのメッセージ マップに追加されます。
  • OnUpdateXXX 関数はメニュー項目の状態を随時更新します。
  • 次に、OnBarCheck 関数は、メニュー項目のチェックマークのオン/オフどおりに、ダイアログ バーが表示/非表示になっているかどうかを調べます。

メニュー項目のプロンプト文字列がプロジェクトのストリング テーブル リソースに追加されます。コマンド ハンドラをインプリメントするには、ClassWizard を使用して、次の手順に従います。

  1. ResourceView で、ダイアログ バーのダイアログ テンプレートを開きます。
  2. Ctrl キーを押しながら W キーを押して ClassWizard を開きます。[クラスの追加] ダイアログ ボックスが表示されます。
  3. [クラスを選択] をクリックして、[OK] をクリックします。[クラスの選択] ダイアログ ボックスが表示されます。
  4. ダイアログ バー コンポーネントを挿入したときに指定したフレーム ウィンドウ クラスの名前をクリックして、[選択] をクリックします。このクラスとダイアログ リソースを関連付けるかどうかを確認するメッセージ ボックスが表示されます。
  5. [はい] をクリックします。[MFC ClassWizard] ダイアログ ボックスの [メッセージ マップ] タブの [オブジェクト ID] ボックスの一覧に、ダイアログ バーのコントロールの ID が表示されます。
  6. 通常の方法で、コントロールにコマンド ハンドラを割り当てます。

メモ ActiveX コントロールをダイアログ バーに追加する場合は、プロジェクトが ActiveX コントロール コンテナ機能をサポートしている必要があります。AppWizard でプロジェクトのスケルトンを生成したときに [ActiveX コントロール] オプションを選択していた場合は、ActiveX コントロール コンテナ機能のサポートがプロジェクトに含まれています。サポートがない場合は、[Gallery] の [Visual C++ Components] フォルダから [ActiveX コントロール コンテナ コンポーネント] を選択してプロジェクトに挿入する必要があります。


実際のコードなどの編集は次の様な手順.

ダイアログリソースの追加.
	「スタイル」を「チャイルド」に.
	「境界線」を「しない」に.
	「タイトルバー」のチェックを外す.

CMainFrame に変数を追加.
	CDialogBar	m_wndDlgBar ;

CMainFrame::OnCreate に追加.
	{
		if (!m_wndDlgBar.Create(this, IDD_DIALOG_BAR,
			CBRS_RIGHT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
			ID_DIALOG_BAR))
		{
			TRACE0("Failed to create dialog bar m_wndDlgBar\n");
			return -1;      // fail to create
			}
	//	m_wndDlgBar.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
	//	EnableDocking(CBRS_ALIGN_ANY);
	//	DockControlBar(&m_wndDlgBar);
		}

Resource.h に ID_DIALOG_BAR を追加.

ダイアログバー上のコントロールに対しての操作は次の様な感じ.
void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	if (m_wndDlgBar.GetSafeHwnd() == NULL)	{	return	;	}
	CListBox*	listBI = (CListBox*)m_wndDlgBar.GetDlgItem(IDC_LIST_BI) ;
	FitWindow(&m_wndDlgBar,listBI,3,	FALSE,	FALSE,	FALSE,	FALSE) ;
	}
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VS 2022 インストール

VS 2022 があったのでインストール.

共通の C の include などは VC 10 からの設定が引き継がれている(同じ所).

フォールバックの設定を E:\Temp\_Fallbck に.
VC 2022 フォールバックの設定

MFC などランタイムは VC 2015 以降同じもの.

3D ビューアをビルドしたが,その範囲では,特に目立った違いはなさそう.

Current という表現は何なんだろうか?




VC のランタイム vc_redist.x86.exe などは次の所にまとめている.
https://mish.work/joomla/index.php/cpp/ref-vcredist-xxx-exe.html
VC 2015 から 2022 までは,同じもので動作する.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VC リリースビルドのデバッグ

先日の VC 6 でのリリースビルドでうまくなかった現象
これをデバッグするための設定.
以前から何度か使っているが,今回コンパイル時の設定部分が何故かすぐにわからなかったのでメモ.
リリースビルドのデバッグ コンパイル設定
同様に,リンクの設定でも「Generate debug info」のチェックが必要.
方法: リリース ビルドをデバッグする

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • カテゴリー:


    top

    %d人のブロガーが「いいね」をつけました。