Iwao Dev

気付いたことをメモしています.

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

MDI exe が動作しない?

Win10 Insider Preview 21H1 環境で,幾つかの exe がうまく動作しない.
引数が正しくありません。
VC 8 でビルドした exe は OK .VC 10 以降は NG のものがある.
SDI exe は大丈夫そうで,MDI exe はすべてではないが NG のものが多い.
タイミングとしては,3D データを読み込んだ後,ウィンドウに表示する前.


SDI exe であっても,VC 14 MFC スタティックだとうまくない?
MFC をスタティックリンクした exe でうまく動作しない
これはプロジェクトの設定がまずかったためで,別の記事に


2021/04/01
ちょっとわからないので,リモートデバッグの環境を作成することに.
MSDN Visual Studio での C++ プロジェクトのリモート デバッグ
リモートツールをダウンロードして,インストール.「スタート」から「Remote Debugger」を起動.
VS 2017 Remote Debugger
リモート側で exe を実行して,ホスト側で「アタッチ」.
VS でリモートのプロセスにアタッチ


2021/04/02
原因は,CRecentFileList::Add を通った時 ::CoInitinalize が呼び出されていないため.
CRecentFileList::Add  0x800401f0:CoInitialize は呼び出されていません
どうも MFC 10 から?変わったみたい.
MS C++ executable just started failing
MFC application crashing in ProcessShellCommand() when file to open specified on command line
それでも,なぜ環境によっては表面化しないのか?


CRecentFileList::Add で Win7 以降の「ジャンプリスト」に登録(::SHAddToRecentDocs )する様になった.
Win10 20H2 でも現象は発生した.2004 では問題ない.


対応としては InitInstance の最初に以下を追加.

	// OLE ライブラリを初期化します。
	if (!AfxOleInit()) {
		AfxMessageBox(_T("OLE の初期化に失敗しました。")) ;
		return	FALSE ;
		}

2021/04/06
2016/夏頃の Win10 で,その様になるものが存在したみたい.
その頃は T90Chi + VC 2015 + i3DV でやっていたと思うが,気づかなかった?

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


VC コンソール AP にリソースの追加

先日作成したコンソール AP に,バージョン情報などを埋め込みたいと思い調べてみた.
検索すると次の所があった.
MSDN リソースを作成する (C++)


「Win32 コンソール アプリケーション」を「空のプロジェクト」として作成.
コードは,個人的な雛型 をコピーしてプロジェクトに登録.

#include	<clocale>
#include	<iostream>
#include	"i_define.hxx"

int	_tmain(int argc, TCHAR* argv[])
{
	_tsetlocale(LC_ALL, _T(""));
	{
		std::tout << _T("hello") << std::endl;
	}
	return	0;
}

「ソリューション エクスプローラー」の「プロジェクト」を「右クリック」-「追加」-「新しい項目」.
VC 2013 リソースファイルの追加
「リソース ファイル (.rc)」を選択,ファイル名を指定して「追加」.
「リソース ビュー」に切り替わるので,ツリーの「~.rc」の所を「右クリック」して「リソースの追加」.
VC 2013 バージョンリソースの追加
必要に応じてアイコンなども追加.
ビルドすると exe に付加されている.
VC 2013 アイコンとバージョン情報をコンソール AP に付加

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


QNAP NAS の Joomla! の設定

先日 Joomla! をインストール したので,その設定.
「システム」-「グローバル設定」-「サイト」-「SEO 設定」.
「システム」-「グローバル設定」-「サイト」-「SEO 設定」
また,htaccess.txt を .htaccess にコピーしないとうまく機能しない.
htaccess.txt を .htaccess にコピー
URL に ID が付加されない様にする設定.
URL から ID を削除
「Login Form」を無効に.
「Login Form」を無効に
「OSMap Free」のインストール.
「OSMap Free」のインストール
「J2XML」のインストール.
「J2XML」のインストール
「J2XML Options」-「Import」の設定.
「J2XML Options」-「Import」の設定

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


C2084: 既に本体を持っています

共有のコードを hxx にまとめてビルドすると…

------ ビルド開始: プロジェクト: G3toM, 構成: Debug Win32 ------
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\v141_xp\Toolset.targets(39,5): warning MSB8051: Windows XP をターゲットとするサポートは非推奨であり、Visual Studio の将来のリリースで提供されなくなります。詳細については、https://go.microsoft.com/fwlink/?linkid=2023588 をご覧ください。
MainFrm.cpp
t:\develop\_.src\__win\c_fbx_to.hxx(23): error C2084: 関数 'bool exec_FBXtoG3(c_tstring &)' は既に本体を持っています。
t:\develop\_.src\__win\c_fbx_to.hxx(22): note: 'exec_FBXtoG3' の以前の定義を確認してください
t:\develop\_.src\__win\c_fbx_to.hxx(61): error C2084: 関数 'tstring call_fbx_to_ig3(c_tstring &)' は既に本体を持っています。
t:\develop\_.src\__win\c_fbx_to.hxx(60): note: 'call_fbx_to_ig3' の以前の定義を確認してください
t:\develop\_.src\__win\c_fbx_to.hxx(66): error C2065: 'exec_FBXtoG3': 定義されていない識別子です。
t:\develop\_.src\__win\c_fbx_to.hxx(74): error C2065: 'exec_FBXtoG3': 定義されていない識別子です。
\\z170s0\e_temp\test.prj\test\vc_test\tomb\g3tom\mainfrm.cpp(276): error C2065: 'call_fbx_to_ig3': 定義されていない識別子です。
\\z170s0\e_temp\test.prj\test\vc_test\tomb\g3tom\mainfrm.cpp(276): error C2440: '初期化中': 'tstring (__cdecl *)(c_tstring &)' から 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>' に変換できません。
\\z170s0\e_temp\test.prj\test\vc_test\tomb\g3tom\mainfrm.cpp(276): note: コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。
プロジェクト "G3toM141.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、1 更新不要、0 スキップ ==========

C2084: 関数 'bool exec_FBXtoG3(c_tstring &)' は既に本体を持っています。
「inline にしているのに…」と思ったが,
#pragma once がないため複数回読み込まれていた.

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

  • カテゴリー:

MFC 起動時のドキュメントの変更

ドキュメントのドロップ時のファイル名の変更 には対応したが,今度は起動時のドキュメントの変更.
InitInstance の所をデバッガで追いかけると,CWinApp::ProcessShellCommand の前後で対応できそう.
CWinApp::ProcessShellCommand
次の様に,対象のファイルを変更して起動できることは確認.

	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);
	{
		if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) {
			cmdInfo.m_strFileName = ::Path_ChangeExt(cmdInfo.m_strFileName,_T("ig3")).c_str() ;
			}
		}
	if (!ProcessShellCommand(cmdInfo))
	//	...
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

SDI exe でファイルのドロップ

SDI exe でファイルをドロップされた時,関連する異なるファイルを開きたくなった.
次の様に,変換済みのデータが存在している時はそれを対象とする.
https://mish.myds.me/wordpress/dev/2021/03/03/win-prevent-2nd/


ドキュメントクラスの OnOpenDocument で変更するのは可能だが「MRU ファイル リスト」に残ってしまう.


15 年位前に,ブラウザからリンクをドロップして動作させるコードを書いた.
最近のブラウザでは,当時の様な操作はできないみたい.
WM_DROPFILES でリンクのテキストが取れたのだったと思う.
この時,何を参考にしてここにたどり着いたかは不明.
それを見ると CMainFrame::OnDropFiles にコードが書いてある.
デフォルトのコードとしては,CFrameWnd::OnDropFiles を呼出している.
CFrameWnd::OnDropFiles
::DragQueryFile でファイル名を取って CWinApp::OpenDocumentFile を呼出している.


CMainFrame::OnDropFiles でファイル名を取った後,処理を追加して CWinApp::OpenDocumentFile を呼べば良い.
手順としては (VC)\…\atlmfc\src\mfc\winfrm.cpp の CMainFrame::OnDropFiles をコピーして編集している.

void CMainFrame::OnDropFiles(HDROP hDropInfo) 
{
	SetActiveWindow();      // activate us first !
	CWinApp* pApp = AfxGetApp();
	ASSERT(pApp != NULL);
	v_tstring	files = ::DropFilesTo(hDropInfo) ;
	if (files.size() > 0) {
		tstring	file = files[0] ;
	//	ここで,必要に応じてファイル名を変更するなどの処理
		pApp->OpenDocumentFile(file.c_str()) ;
		}
	::DragFinish(hDropInfo);
//	CFrameWnd::OnDropFiles(hDropInfo);
	}

今回は SDI なのでこんな感じ.MDI であればループで回せば良い.

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


C2679 右オペランドを扱う演算子…

あるプロジェクトに デバッグライト を追加してビルドすると

------ ビルド開始: プロジェクト:T_cmb_f, 構成:Release Win32 ------
  T_cmb_f.cpp
T_cmb_f.cpp(32): error C2679: 二項演算子 '<<': 型 'tstring' の右オペランドを扱う演算子が見つかりません (または変換できません)。
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(495): note: 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)' の可能性があります
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(475): note: または 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)'
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(455): note: または 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)'

C2679 右オペランドを扱う演算子が見つかりません
最近の VC はエラーの原因以外の情報がいっぱい表示されることがあるのでちょっとわかり難い.
「Unicode 文字セットを使用する」になっているのに std::cerr としていたため.
std::terr とすれば OK .

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

  • カテゴリー:

エントリ ポイントが見つかりません

FBX SDK 2020.1.1 を使用したコンソール AP のプロジェクトを VC 11 でビルド.
「プラットフォームツールセット」は「Visual Studio 2012 – Windows XP (v110_xp)」.
「プラットフォームツールセット」-「Visual Studio 2012 - Windows XP (v110_xp)」
ビルドした exe を WinXP 環境で実行すると,
—————————
T_FBX.exe – エントリ ポイントが見つかりません
—————————
プロシージャ エントリ ポイント InterlockedCompareExchange64 がダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。
—————————
OK
—————————
InterlockedCompareExchange64 がダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。
Dependency Walker
VC 10 や VC 12 でビルドしたものは問題ない?
SDK のバージョンを変更して試してみると,
2019.0 までは OK で,2019.2 以降がうまくない.


他に VC 14 以降でビルドしたものがうまく動作しない.
何も表示されず exe が抜けて(終了して)しまったり,FBX の変換動作が機能しなかったりしている.
SDK 2020 では XP がサポートされていない.
https://help.autodesk.com/view/FBX/2020/ENU/
https://help.autodesk.com/view/FBX/2019/ENU/


FBX SDK とは直接関係ないが,
VC 14 以降のコンソール AP で,XP ではうまく実行できないものがある?
「プラットフォームツールセット」は「Visual Studio 2015 – Windows XP (v140_xp)」.
「標準 Windows ライブラリを使用する」とした exe は,起動はするがうまく実行できない.
「共有 DLL で MFC を使う」にすれば動作する.
「スタティック ライブラリで MFC を使用する」は未確認.


2020/03/16
VC 14 でビルドしたコンソール AP がうまく動作しなかったのは _stat .
何年か前に書いていた.WinXP で VC 14 _stat


vcredist_x86.exe を更新したからか,現象がちょっと変わってしまった.
全てではないが,先日通らなかったものが通る様になったものもある.
_stat で抜けてしまっていた exe が,うまく機能している?

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

  • カテゴリー:

QNAP NAS に Joomla!

「AppCenter」で「Joomla」をインストール.表示されるバージョンは古いが,後で更新できる.
「AppCenter」で「Joomla」をインストール
「インストール」後「開く」.
サイト情報の設定.「サイト名」や「サイトの説明」は後からでも変更できる.
Joomla! サイト設定
データベース設定.ユーザ名とパスワードは「SQL サーバー」の設定 で指定したもの.
Joomla! データベースの設定
インストール内容の確認.
Joomla! インストール内容の確認
言語の追加インストール.
Joomla! 言語の追加インストール
言語パッケージの選択.
Joomla! 言語パッケージの選択
Japanese を指定.
Joomla! Japanese を指定
インストール完了.
Joomla! インストール
「installationディレクトリを削除」で「管理画面」などに入れるようになる.
Joomla! 管理画面のログイン
Joomla! を「今すぐアップデート」で更新.
Joomla! 「今すぐアップデート」
更新のインストール.
Joomla!  3.9.25 のインストール

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


仮想マシンの XP が遅くなった?

今はもう誰も必要ないと思う情報.


先日 WinXP の VHD が入っている HDD が壊れて交換.
その時,ついでに PC のメモリも増設している.
壊れかけた HDD には不良セクタがあった様だが,対象の VHD は大丈夫だった.
デュプリケーターでコピーして,それなりに動作していると思う.


その後,仮想マシンの WinXP の動作が遅くなった?
全体的に遅いのではなく,メッセージボックスが出る時に数秒止まる様な感じ.
WinXP が遅くなった?


何が原因かしばらくわからなかった.
ホストのメモリに余裕がでたので,仮想マシンのメモリの割り当てを増やした.
この仮想マシンは 1.5G だったのを 3G に.
これがいけなかったみたいで,2G にすることで前の状態に戻ったと思われる
これは関係なかった.再起動による一時的な解消.
「仮想マシンの状態を保存」をすると解消される?


2021/03/14
遅くなるのは,音が出る時.使っているうちに音が再生されるまでのタイムラグが大きくなる.
使い勝手は良くないが,
VirtualBox の「仮想マシンの状態を保存」で解消できることを確認.
仮想マシンの状態を保存
「一時停止」では効果はない.

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



    top

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