ホーム » メモ (ページ 3)

メモ」カテゴリーアーカイブ

2024年5月
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 80,778 アクセス



VC プロファイラが…

先日使った VC のプロファイラがうまく動作しなくなった?
動作としては開始するが,結果が取れない.
VC プロファイラがうまく動作しない
「CPU 使用率」で,実行中のグラフは表示されている.
実行終了後,下の部分の関数名などが表示される所のデータがうまく生成されない?
次の様にやってもうまくいかない.
MSDN クイック スタート: Visual Studio の CPU 使用率データの分析 (C++)
「手順 2: CPU 使用率データの分析」のデータが取れない.


設定なども確認したが,特に影響しそうな所はわからない.
PC を再起動してもダメ.
何で?


ここに入っている VS 2008 は Team System なので,プロファイラが何とか動くみたい.
VC 2008 プロファイラ
結果が表示されるまで時間がかかるのと,ボトルネックを見つけるのに使い勝手があまり良くなさそう.
もう少しあたりを付けて,単体テスト用のコードを書いて調べた方が効率が良さそう.


VC 2008 でやってみた.
VC 2008 プロファイラ
VC 2015 などと比べると,生成までの時間がかかる.その後の操作も面倒.
更に出来上がっていた vsp が,193 GB .


先ず簡単に変更できるコード.

template	<class	V3>	long	V3_Search	(const std::vector<V3>& pnts,const V3& pos)
{
	for (size_t index=0 ; index<pnts.size() ; index++) {
		V3	pnt = pnts[index] ;
		if (pnt == pos)	{
			return	long(index) ;
			}
		}
	return	-1 ;
	}

pnt の変数を使わず,直接比較するコードに.VC 6 でビルドして実行.
VC 6 V3_Search
最近のコンパイラはうまく最適化してくれるので,VC 8 などでは効果がなかった(最初から速い).


ここでの検索で一致するデータは,比較的後ろの方に存在することが多いので,後ろから検索する様に変更.

//	for (size_t index=0 ; index<pnts.size() ; index++)
	for (long index=long(pnts.size())-1 ; index>=0 ; index--)

登録されているデータにもよるが 1/3 位の時間になった.
V3_Search  後ろから検索


2021/04/12
更にコードを変更.
この関数は,呼び元との多重ループとなることがあるのと,検索して見つからないことも多いので,検索最大数を指定可能に.

template	<class	V3>	long	V3_Search_	(const std::vector<V3>& pnts,const V3& pos,const size_t max=-1)
{
	size_t	count = 0 ;
	for (long index=long(pnts.size())-1 ; index>=0 && count<max ; index-- , count++)
	{
		if (pnts[index] == pos)
		{
			return	long(index) ;
			}
		}
	return	-1 ;
	}

最大数を 1000 として,処理速度の許容範囲にはなった.
V3_Search  検索最大数を 1000 に
出来上がったデータとして問題ないかの検証はこれから.


検索して一致するデータは,最後と最初に存在することが多いので,その判断部分を変更.

template	<class	V3>	long	V3_Search_	(const std::vector<V3>& pnts,const V3& pos,const size_t max=-1)
{
	for (size_t index=0 ; index<pnts.size() /*&& index<max*/ ; index++)
	{
		if (pnts[index] == pos) {
			return	long(index) ;
			}
		size_t	index_l = pnts.size()-index-1 ;
		if (index>=index_l) {	break ;		}
		if (pnts[index_l] == pos) {
			return	long(index_l) ;
			}
		}
	return	-1 ;
	}

20% 程度の効果.但し VC 8 でビルドしたものは遅くなってしまった.


2021/04/14
やはり,頂点などの検索のループで最大数を指定すると,得られる結果が異なる.
そのため,最大数を指定するのは限定的とする.今回は STL 読込み で 10000 に.


2022/01/18
全ての VC で確認したわけではないが,プロファイラが使える様になっている.
VC 2019 プロファイラ

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

HVL-LS4 入手

録画用 USB HDD の空きが少なくなってきたので HVL-LS4 を追加.


電源を接続すると ON の状態になるので注意.
マニュアルなどでは DR Controler をインストールして設定する様になっているが,PC から HVL-xxx を探してブラウザなどで開くことも可能.
HVL-LS4 ディスク管理


当然のことだが HVTR-BCTX3 からのコピーは,特に問題なくできた.
少し面倒なのが,コピーカウントがそのまま引き継がれるわけではないので,コピー回数分がカウントされる.
HVL-LS4 コンテンツの管理
HVL-AHW からの移動も,同じコンテンツは HVTR-BCTX3 からコピーしたものに追加でカウントされているみたい.
HDL-AH2W からの「ネットワーク転送」


2021/05/01
暫く使って感じたこと.
特に問題なく使えている.HVTR-BCTX3 に USB 接続 HDD からの移動で 50 GB 程度空いた.
PC TV Plus での 視聴も問題ない
録画したコンテンツの操作のフォルダわけなどの時,ツリー表示がないので 操作 が少し面倒.
Windows で例えると,エクスプローラで左のツリーがない様な状態での操作になる.

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

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

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


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


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


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


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

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

「お名前.com」の設定

先日申し込んだ「お名前.com」の設定のメモ.

やはり全体的にわかり辛い.
ログインした時のホップアップも邪魔.
欲しい情報の検索をかけても help.onamae.com が上位に表示されてしまう.
またその内容(特に画像)が古いものが多い気がする.


メールが多すぎるので「お知らせメールの受信」を「配信なし」に設定.
画面右上の「お名前ID:?????」の所をクリックして「会員情報の確認/変更」に入り,その画面の下の方で設定.
whois 情報は申込時のデフォルト(WHOIS情報公開代行)のまま.


DNS の設定へ入る方法がわかり辛かった.
お名前.com 「DSN設定」
間違って「お申込み」のリンクの方を選んでしまうとカード情報の入力になる.
やりたかったのは「次へ」を押すとその画面が切り替わり表示される.
その中の「DNSレコード設定を利用する」の「設定する」をクリック.
お名前.com DNSレコードの設定
Aレコード」の方はうまくいったが,「AAAAレコード」の方はどこかの設定が悪いみたいでうまくいかない.


2021/02/22
Search Console の「DNS レコードでのドメイン所有権の確認」.
「以下の … DNS 設定にコピーします」を「コピー」.
お名前.com 「DNS レコードによる所有権の確認」の設定
「Value」の所に「貼り付け」.
「確認画面へ進む」,「設定する」で設定.
「Search Console」に戻り,「DNS レコードでのドメイン所有権の確認」の「確認」.
10 分程度で反映された.


2021/02/23
IPv6 関係で「DNSレコード設定」はそれ(AAAAレコード)で良かったみたい.
LAN 内では 3 つの NAS それぞれにアクセスできるようになった.
外からは,ルータの設定などがまだ足りないみたいでうまくアクセスできていない.


2021/03/09
Search Console 登録による Google からのアクセス.
mish.work を Search Console に登録

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

ドキュメント付きの起動で抜ける?

個人的なコートでのメモです.


普通に exe を起動してドキュメントを開くのは問題ない.
ドキュメント付きで起動すると,ウィンドウが表示されて,ドキュメントを読込み後終了してしまっている.
コマンドライン引数の設定
デバッガで追いかけると,ProcessShellCommand の呼び出しで FALSE となっている.
ProcessShellCommand の結果が FALSE
原因は,ドキュメントの読込み後にアプリケーションクラスにアクセスしている所で初期化が済んでないため.
初期化のコード(RcntFM)を CCommandLineInfo の前にして対応.

	// メイン MDI フレーム ウィンドウを作成
	CMainFrame* pMainFrame = new CMainFrame;
	if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
		return FALSE;
	m_pMainWnd = pMainFrame;
	// ドラッグ/ドロップ オープンを許可します
	m_pMainWnd->DragAcceptFiles();
	{
		RcntFM.Read() ;
		RcntFM.SetStartID(ID_RECENT_FILE_00) ;
		}
	// DDE、file open など標準のシェル コマンドのコマンドラインを解析します。
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);
	if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) {
		cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;
		}
	// コマンドラインでディスパッチ コマンドを指定します。
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

これをやっていて困ったのが,ソースのタイル表示.
VC 2019 タイル表示
VS 2019 ではうまく動作するが,2017 など他のものではエラーになってしまう.
VC 2015 タイル表示でアプリケーションエラー

---------------------------
GLSm140: devenv.exe - アプリケーション エラー
---------------------------
0x000000006359C044 の命令が 0x0000000000000000 のメモリを参照しました。メモリが read になることはできませんでした。
プログラムを終了するには [OK] をクリックしてください
プログラムをデバッグするには [キャンセル] をクリックしてください
---------------------------
OK   キャンセル   
---------------------------
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

#pragma message ( … (value) )

FBX SDK を使用したプロジェクトで,コンパイル時 FBX SDK のバージョンを表示したくなった.
FBX 2013.3 SDK 位からは FBXSDK_VERSION_STRING が使える.

#ifdef	FBXSDK_VERSION_STRING
	#pragma	message	("FBXSDK_VERSION " FBXSDK_VERSION_STRING)
#endif

それより古い場合に,コンパイルオプションで FS_VER=201100 などと指定する様にした.
考え方や動作は意図した通りになったが,この FS_VER を表示できないものかと…
検索すると VC では _CRT_STRINGIZE が使えるとあった.
コンパイル時に#defineの値を表示するにはどうすればよいですか?

#ifdef	FS_VER
	#pragma	message	("FS_VER " _CRT_STRINGIZE(FS_VER))
#endif

_CRT_STRINGIZE は …\VC\include\crtdefs.h や …\VC\include\vcruntime.h に定義されている.


古い VC などでも使える様に…

#ifndef		__CRT_STRINGIZE
	#define	__CRT_STRINGIZE(Value)	#Value
#endif
#ifndef		_CRT_STRINGIZE
	#define	_CRT_STRINGIZE(Value)	__CRT_STRINGIZE(Value)
#endif

https://python5.com/q/uxqhkyvx
#pragma message (_CRT_STRINGIZE(FS_VER))

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

CListBox などのオーナードロー

リストスクロール時,動作が逆に見える現象の調査のため調べたこと.


WinCore.cpp CWnd::OnMeasureItem での CtlType の値

/*
 * Owner draw control types
 */
#define ODT_MENU        1
#define ODT_LISTBOX     2
#define ODT_COMBOBOX    3
#define ODT_BUTTON      4
#if(WINVER >= 0x0400)
#define ODT_STATIC      5
#endif /* WINVER >= 0x0400 */
/*
 * Listbox Styles
 */
#define LBS_NOTIFY            0x0001L
#define LBS_SORT              0x0002L
#define LBS_NOREDRAW          0x0004L
#define LBS_MULTIPLESEL       0x0008L
#define LBS_OWNERDRAWFIXED    0x0010L
#define LBS_OWNERDRAWVARIABLE 0x0020L
#define LBS_HASSTRINGS        0x0040L
#define LBS_USETABSTOPS       0x0080L
#define LBS_NOINTEGRALHEIGHT  0x0100L
#define LBS_MULTICOLUMN       0x0200L
#define LBS_WANTKEYBOARDINPUT 0x0400L
#define LBS_EXTENDEDSEL       0x0800L
#define LBS_DISABLENOSCROLL   0x1000L
#define LBS_NODATA            0x2000L
#if(WINVER >= 0x0400)
#define LBS_NOSEL             0x4000L
#endif /* WINVER >= 0x0400 */
#define LBS_STANDARD          (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
// Measure item implementation relies on unique control/menu IDs
void CWnd::OnMeasureItem(int /*nIDCtl*/, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
	if (lpMeasureItemStruct->CtlType == ODT_MENU)
	{
	//	...
	}
	else
	{
		CWnd* pChild = GetDescendantWindow(lpMeasureItemStruct->CtlID, TRUE);
		if (pChild != NULL && pChild->SendChildNotifyLastMsg())
			return;     // eaten by child
	}
	// not handled - do default
	Default();
}

GetDescendantWindow で求めた pChild が NULL のため CListBox::OnChildNotify から MeasureItem が呼ばれない?
呼ばれた時の lpMeasureItemStruct->itemHeight は,ODT_LISTBOX は 18 ,ODT_COMBOBOX は 20 .
デバッガで高さを設定すると,その高さになる.
OWNERDRAWVARIABLE は項目ごとに呼ばれるが,OWNERDRAWFIXED の時はうまくない?


結局,VC 6 などの場合にそうなる(逆にスクロール)様子.
コモンコントロール Ver.6 を使う様にすることで回避できる.
コモンコントロール Ver.6 の指定
VC 6 exe などの場合は (VC6_app).exe.manifest ファイルを用意する.
視覚スタイルを有効にする

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

std::vector のコピーで実行時エラー

std::vector のデータ vf3a をコピーしようとして実行時エラー.

---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
Program: c:\Temp\Test\T_gonsa\T_cmb_f\debug.080\T_cmb_f.exe
File: c:\program files (x86)\microsoft visual studio 8\vc\include\vector
Line: 741
Expression: vector subscript out of range
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
中止(A)   再試行(R)   無視(I)   
---------------------------

原因は vf3a のサイズが 0 .
std::vector のサイズが 0 で実行時エラー
vf3a.size() が 0 より大きい時のみコピーする様に変更しなければならない.

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

3D データの読み書きの時間

3D データを保持するために,幾つかの形式での読み書きの時間を計測.

bool	T_s_a_l	(const GonsA& gnsa_,LPCTSTR pathName)
{
	GonsA	gnsa = gnsa_ ;
	double	slt = 0 ;
	double	s_t = 0 ;
	double	l_t = 0 ;
	{	//	save
		ElapseTime	et ;
		::GonsA_To(gnsa,pathName) ;
		s_t = et.GetElapse() ;
		}
	{	//	load
		ElapseTime	et ;
		GonsA	ga = ::To_GonsA(pathName) ;
		l_t = et.GetElapse() ;
		}
	{
		slt = s_t + l_t ;
		}
	std::tout << ::Path_GetExtLow(pathName) 
		<< _T("\t") << slt << _T("\t") << l_t << _T("\t") << s_t 
		<< std::endl ;
	return	true ;
	}
file ? =\\DS116\public\...\123test-layer2\123test-layer2.3ds
ac      1.192   0.711   0.481
imo     4.206   3.195   1.011
x3d     2.213   0.461   1.752
wrl     0.831   0.55    0.281
3ds     0.571   0.37    0.201
ix3     1.853   1.092   0.761
ply     3.114   1.852   1.262
nxr     1.623   0.812   0.811
stl     0.2     0.15    0.05
ipl     4.947   4.436   0.511
file ? =\\DS116\public\...\123test-layer2\123test-layer2.3ds
ac      1.202   0.711   0.491
imo     4.016   3.065   0.951
x3d     0.751   0.461   0.29
wrl     0.871   0.601   0.27
3ds     0.511   0.291   0.22
ix3     1.792   1.021   0.771
ply     3.145   1.923   1.222
nxr     1.512   0.701   0.811
stl     0.2     0.15    0.05
ipl     4.867   4.346   0.521
file ? =\\DS116\public\...\9LM-2U-J8F8B-3DLJ.001\9LM-2U-J8F8B-3DLJ.stl
ac      16.214  9.504   6.71
imo     100.935 93.545  7.39
x3d     10.004  6.129   3.875
wrl     12.849  9.073   3.776
3ds     27.149  0.301   26.848
ix3     72.023  38.485  33.538
ply     77.751  62.049  15.702
nxr     21.912  9.974   11.938
stl     31.345  30.784  0.561
ipl     1893.04 1886.52 6.519

file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\n2950x2450mm.dae
ac      1.011   0.551   0.46
imo     2.624   2.013   0.611
x3d     1.031   0.33    0.701
wrl     0.772   0.511   0.261
3ds     0.881   0.511   0.37
ix3     2.053   1.182   0.871
ply     2.543   1.502   1.041
nxr     1.443   0.471   0.972
stl     0.41    0.35    0.06
ipl     19.458  18.917  0.541
file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\n2950x2450mm.dae
ac      1.012   0.551   0.461
imo     2.613   2.023   0.59
x3d     0.751   0.33    0.421
wrl     0.731   0.47    0.261
3ds     0.841   0.421   0.42
ix3     2.063   1.172   0.891
ply     2.623   1.652   0.971
nxr     1.593   0.491   1.102
stl     0.41    0.35    0.06
ipl     18.267  17.746  0.521
file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\133118.x3d
ac      18.266  8.762   9.504
imo     55.18   45.175  10.005
x3d     19.888  6.799   13.089
wrl     19.268  14.681  4.587
3ds     15.172  3.165   12.007
ix3     48.259  24.765  23.494
ply     69.459  38.655  30.804
nxr     21.321  6.74    14.581
stl     15.943  15.102  0.841
ipl     1290.08 1282.34 7.741

* この結果は私のコードでの時間で,一般的なコードとは異なると思う.
3D データの読み書きの時間


2020/11/11

'\\testxp\documents\Develop\VC_Test\T_gonsa\T_cmb_f'

file ? =\\Z170S0\Temp\i_Tools.tmp\T_cmb_f\20201111\133118.x3d
x3d     9.422   5.203   4.219
ipl     303.235 296.594 6.641
wrl     8.016   3.266   4.75
ix3     22.766  8.329   14.437
stl     5.687   5.265   0.422
ply     32.875  17.844  15.031
3ds     5.204   1       4.204
ac      7.733   4.062   3.671
mqo     165.907 162.438 3.469
nxr     11.812  5.047   6.765
imo     26.437  19.484  6.953

ipl     20.437  9.25    11.187
ply     34.625  13.844  20.781
stl     3.359   0.922   2.437
x3d     89.297  30.25   59.047
mqo     47.781  0       47.781
nxr     108.609 43.046  65.563
ix3     294.405 171.546 122.859
wrl     99.313  54.297  45.016
ac      56.454  12.922  43.532
imo     3057.28 3007.03 50.25
3ds     189.515 117.265 72.25

ipl     418.797 407.344 11.453
ix3     27.75   8.078   19.672
ply     43.546  23.093  20.453
x3d     20.391  7.485   12.906
ac      15.406  6.453   8.953
nxr     13.173  5.313   7.86  
stl     6.656   5.125   1.531
wrl     13.767  7.282   6.485
imo     52.499  37.187  15.312
mqo     304.547 294.406 10.141
3ds     9.313   1.172   8.141

file ? =

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

MFC コントロールのサブクラス化

今まで CWnd::SubclassDlgItem を使ってきたが,DDX_Control も同じ様なことをしているのではと思い調べてみた.


リストボックスをサブクラス化した時の OnInitDialog でのコード.

{
	m_CtrlListFolder.SubclassDlgItem(IDC_LIST_FOLDER,this) ;
	m_CtrlListFolder.Init() ;
	m_CtrlListFolder.ResetContent() ;
	m_CtrlListFolder.SetItemHeight(30) ;
	}

IDC_LIST_FOLDER は,オーナードローリストボックス.
リストボックス オーナードロー
Inside Visual C++ や MFC による Windows 95 プログラミング を参考にしたと思う.
DDX_Control
MFC のバージョンが上がると少しずつ変更が加わっている.
ソースは DlgData.cpp .VC 11 からは WinCore2.cpp .
MFC のソースは難しい.


かなり前の MSDN で次の内容を見つけた.
[MSVC] MFC を使用しての動的サブクラス化
[MSVC] MFC を使用しての動的サブクラス化
DDX_Control でもいけそうな気もするが,…

テクニカル ノート 14:カスタム コントロール

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

C++ 継承でのエラー C2660

元々一つのクラスとしていたが,それを分割した時のエラー対応のメモ.

bool	D_Image::Draw	(HDC hdc,const RECT rect)
{
	if (GetDocPath().empty())		{	return	false ;		}
	{
		if (::Path_GetExtLow(GetDocPath()) == _T("emf")) {
			return	E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ;
			}
		}
	if (HBMP == NULL && HICN == NULL) {
	//	...
		}
	if	(HBMP != NULL)	{	return	::Bitmap_Draw(hdc,rect,HBMP) ;	}
	else if	(HICN != NULL)	{	return	::Icon_Draw  (hdc,rect,HICN) ;	}
	return	false ;
	}
bool	D_Image::Draw	(HWND hwnd)
{
	if (GetDocPath().empty())		{	return	false ;		}
	if (hwnd == NULL)			{	return	false ;		}
	RECT	rect = {	0	} ;
	::GetClientRect(hwnd,&rect) ;
	bool	result = false ;
	{
		HDC		hdc  = ::GetDC(hwnd) ;
		result = Draw(hdc,rect) ;
		::ReleaseDC(hwnd,hdc) ;
		}
	return	result ;
	}

この E_MetaF::Play の部分を分離.

class	D_I_E	:	public		D_Image		{
public:
	virtual	bool	Draw		(HDC  hdc,const RECT rect)	{
		if (GetDocPath().empty())	{	return	false ;		}
		{
			if (::Path_GetExtLow(GetDocPath()) == _T("emf")) {
				return	E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ;
				}
			}
		return	D_Image::Draw(hdc,rect) ;
		}
	} ;

この状態で変数の宣言を D_I_E として呼び出している所でエラー.

		Sel_doc.Draw(this->GetSafeHwnd()) ;
	//	Sel_doc.D_Image::Draw(this->GetSafeHwnd()) ;
--------------------構成: T_DImage - Win32 Debug--------------------
コンパイル中...
T_DI_Dlg.cpp
\\TestXP\Documents\Develop\VC_Test\Test\etc\EnhMetaF\T_DImage\T_DI_Dlg.cpp(186) : error C2660: 'Draw' : 関数が不正な 1 個の実引数をともなって呼び出されました。
cl.exe の実行エラー
T_DImage.exe - エラー 1、警告 0

下の様に修飾すれば通る.
また,D_I_E の関数として次のものを用意すれば D_Image:: の様に修飾しなくても大丈夫.

	virtual	bool	Draw		(HWND hwnd)	{
		return	D_Image::Draw(hwnd) ;
		}

変更の内容にもよるが,
なるべく既存のコード(呼び出している部分)の変更が最小限となる方が良いか?
C++ 継承でのエラー

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

TS-253D 再セットアップ – 6

今日 QTS を起動すると,更新版があると表示が…
メッセージに従い操作すると何故か更新できない.
QNAP ファームウェア更新エラー
Qfinder やスマートフォンから操作しても更新できない.
他にも,先日から Ubuntu Linux Station の更新がうまくできなくなっている.


これらがうまく機能しなくなったのは先週くらい?から.
閉じた LAN 用にスイッチングハブを追加してそこに接続したのが影響している?
試しに LAN ケーブルを外して更新すると通った.
同様に Ubuntu Linux Station も更新できた.
QNAP Ubuntu Linux Station インストール


2020/10/05
記事を書いた時は設定場所がわからなかった.
「ネットワーク」-「インターフェース」の中に「システムの既定のゲートウェイ」がある.
開いた設定画面で LAN 1 に設定.
QNAP デフォルトゲートウェイの設定


2020/11/08
先日また QTS の更新版があり更新してみたが…
「システムの既定のゲートウェイ」の設定だけでは回避できないのか?それとも設定が違う?
結局ケーブルを抜いて更新した.

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

Joomla! の URL

Joomla! のページで,今まで URL に Joomla! が管理している ID が付加されていた.
特に困ってはなかったが,他の NAS に移行すると ID が変わってしまうみたいなので調べてみた.
検索してもなかなかいい情報がヒットしない.
それで見つけたのが次の所.
Joomlaの新しいSEF URL(パーマリンク)
Joomla! の URL の ID を削除する設定
「記事:オプション」の「ルーティング」の所を「モダン」を選択して「URLからIDを削除する」を「はい」に.


Joomla! は,インデックスされるまで 404 となってしまう.
そのため一部のページは次の様なファイルを置くことで対応.
https://mish.work/joomla/index.php/cpp/ref-vcredist-xxx-exe.html

<!DOCTYPE html>
<html	lang="ja"	>
	<head	>
		<meta	charset="UTF-8"	/>
		<meta	name="viewport"	content="width=device-width,initial-scale=1.0"	/>
		<title	>vcredist</title>
		<meta	http-equiv="refresh"	content="0;url=/joomla/index.php/cpp/ref-vcredist-xxx-exe.html">
		</head>
	<body	>
		</body>
	</html>

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

robocopy でエラー 50 (0x00000032)

次の様なコマンドでファイルをバックアップしていると,

robocopy "\\DevX\Public\Documents\Develop"  "\\AS5202T\Public\Document\Develop"  /e /xo /xf *.bak 
...
                           6    \\DevX\Public\Documents\Develop\VC_Test\T_mem\T_PhysF\
                           8    \\DevX\Public\Documents\Develop\VC_Test\T_STL\
2020/09/11 10:03:08 エラー 50 (0x00000032) コピー先ディレクトリにアクセスしています \\AS5202T\Public\Document\Develop\VC_Test\T_STL\
この要求はサポートされていません。
30 秒間待機しています... 再試行しています...

robocopy エラー 50 0x00000032
何かの拍子に開いたままの状態になってしまったみたいで ASUSTOR NAS で「切断」することで対応.
ADM 「システム情報」-「オンラインユーザー」-「切断」
* 使用しているユーザを切断しない様に注意.


ディレクトリ以下のコピー
ClCpy 2021.06

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

日本語名ファイルのアップロード

次の所から日本語名のファイルをアップロードはできていたが,コードでの対応はうまくできていなかった.
https://itl.mish.work/…/upload.htm
そのため,アップロード時に 7 ビットのファイル名に変換することで対応していた.
これらのコードを書いたのは 3 年位前なので,その当時はまだよくわかっていなかった.
https://dev.mish.work/wordpress/2017/09/04/chttpfile-http-post/
またテクスチャファイル名などが日本語の場合はうまくいかないことも多かった.


最初,日本語名でそのままアップロードすると,いろいろ困った現象に…
PC から NAS 上のアップロード先のファイルが見えなくなってしまった.
一度スマートフォンの NAS 用のファイルマネージャから参照すると PC でも見えるようにはなった.
動作を見ると,サーバ側のコードは動作しているが,格納しているファイル名がうまく渡せていない.
ログなどを確認すると,デバッグ用 MBCS.exe でファイル名が「シフト JIS」のままになっていた.


送られるデータとしては次の所にあたる部分.
$_FILES[‘userfile’][‘name’]
これを UTF-8 にして渡す必要がある.
コードとしては次の所.

v_char	Make_send_data	(LPCTSTR upFile,LPCTSTR ___boundary)
{
	v_char	up_Data = v_c_Load(upFile) ;
	v_char	sndData ;
	{
		tstring	ct_boundary	=	___boundary ;
		tstring	file_img	=	::QuotM_Add(_T("file_img")) ;
		tstring	fileName	=	::QuotM_Add(::Path_GetName(upFile)) ;
		tstring	dataPre ;
		tstring	dataPst ;
		dataPre+=	CT_boundary__	+	ct_boundary	+			C_CRLF ;
		dataPre+=	CD_cd_f_d_n_	+	file_img	+	CD_cd__fn_	;
		dataPre+=				fileName	+			C_CRLF ;
		dataPre+=	CT_ct_a_o_s							C_CRLF ;
		dataPre+=									C_CRLF ;
		dataPst+=									C_CRLF ;
		dataPst+=	CT_boundary__	+	 ct_boundary	+	CT_boundary__	C_CRLF ;
	//	v_char	vc_pref = ::To_v_char(::To__string(dataPre.c_str())) ;
		v_char	vc_pref = ::To_v_char(::To_UTF8   (dataPre.c_str())) ;
		v_char	vc_post = ::To_v_char(::To__string(dataPst.c_str())) ;
		sndData.insert(sndData.end(),vc_pref.begin(),vc_pref.end()) ;
		sndData.insert(sndData.end(),up_Data.begin(),up_Data.end()) ;
		sndData.insert(sndData.end(),vc_post.begin(),vc_post.end()) ;
		}
	return	sndData ;
	}

To__string でそのまま char の配列としていたものを UTF-8 にしてから char の配列に.
UpFile.hxx アップロードするファイル名を UTF-8 に
UpFile.hxx
quotm.hxx


2020/09/08
今度はサーバ側のコード.
本当はクライアントの CInternetSession のコンストラクタで与える User Agent .
UTF-8 でセットすれば良いのはわかるが,引数が LPCTSTR なのでどうすれば良いかわからず.
そのためサーバ側のログを出力する部分でうまく機能しないことがある.
Synology NAS では,一部文字化けするが特に問題なさそう.
ASUSTOR NAS や QNAP NAS では,20200908.txt の読み込み時に止まっている様子.
次の様に //IGNORE を付加して変換.

iconv API は iconv_open(_T("UTF-8//IGNORE")) 
iconv -f CP932 -t UTF-8//IGNORE 20200908.txt >  20200908.uf8
uconv -f CP932 -t UTF-8 -i      20200908.txt -o 20200908.uf8
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

CEdit に複数行の貼り付けで消える?

先日作成していたツールで,エディットボックスに複数行のデータを貼り付けるとうまく機能しない現象があった.
数行ならば OK だが,20 行位を超えると,一瞬表示されるが消えてしまう.
表示できる行数を超えていると貼り付けできないみたい.
Edit プロパティ 垂直スクロールバー 垂直オートスクロール
対応方法は「Edit プロパティ」の「垂直スクロールバー」か「垂直オートスクロール」にチェックを付ける.
VC 2019 CEdit V scroll

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

TS-253D 温度

昨日から,システムの温度とファンの回転数が正しく表示されなくなった.
TS-253D  システムの温度
ディスクの温度は 40 度位なので正常と思われる.
ファンの音も変化するので,表示だけの問題ではないかと思う.
NAS の再起動で一時的に正しく表示するが,しばらくするとダメ.
スマートフォンの Qmanager も同様.
先日 QTS(ファームウェア)をアップデートした関係か?


記事を書いた後 NAS を再起動.その後安定している?
TS-253D  温度


2020/08/25
今日は CPU 使用率の表示がされない.
TS-253D  CPU 使用率
これも NAS の再起動で解消.


2020/08/26
Q’center が更新された.何か不具合があったのかも…


https://jml.mish.work/various/nas/qnap-nas.html

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

TS-253D セットアップ – 5

メール通知の設定.
QNAP NAS メール通知の設定


WordPress の設定.
QNAP NAS  WordPress
そのまま進めてしまうとエラー.
QNAP NAS データベース接続確立エラー
検索すると pnpMyAdmin を入れるみたい
https://www.qnap.com/ja-jp/how-to/knowledge-base/article/how-to-install-wordpress-on-qts-4-4/
QNAP NAS  phpMyAdmin
phpMyAdmin を起動して root / admin と入力しても入れない.
「コントロールパネル」-「アプリケーション」-「SQLサーバー」で有効にする必要がある.
またこの時 root のパスワードを指定する.
QNAP NAS  SQL サーバ  パスワード指定
phpMyAdmin で wordpress データベースの作成
QNAP NAS WordPress データベース設定
QNAP NAS  WordPress  ブログ情報の登録
QNAP NAS WordPress ダッシュボード


Joomla! の設定.ASUSTOR NAS の時と同様.
QNAP NAS Joomla!  サイトの設定
QNAP NAS Joomla!  データベース設定
QNAP NAS Joomla!  インストール
QNAP NAS Joomla!  言語のインストール
QNAP NAS Joomla!  コントロールパネル

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

TS-253D セットアップ – 4

Virtualization Station 3 のエクスポート.
先日作成した Win10 を VirtualBox などで開くためにエクスポート.
仮想マシンの下にある「エクスポート」ボタンを押して,*.ovf で「スタート」.
Virtualization Station 3 で ovf のエクスポート
18 GB の img で 40 分位かかった.出力された vmdk は 9 GB .
AS5202T の VirtualBox で「ファイル」-「仮想アプライアンスのインポート」.
ASUSTOR NAS VirtualBox 仮想アプライアンスのインポート
変換に 5 分位.
そのまま実行すると 0xc0000225 .
チップセットを「ICH9」,「I/O APIC を有効化」にチェック.
AS5202T VirtualBox の仮想マシンの設定
安定して動作はするが,どこかで間違えたみたいでネットワークがうまく機能しない.
AS5202T phpVirtualBox
PC の VirtualBox で読み込んでみたが,やはりネットワークがうまく動作していない.
PC の VirtualBox でもネットワークがうまくない


今度は VirtualBox のエクスポート.
PC の VirtualBox で「仮想アプライアンスのエクスポート」,AS5202T 上の DevX をエクスポート.50 分位.
VirtualBox 仮想アプライアンスのエクスポート
QNAP NAS Virtualization Station 3 で「VM のインポート」.20 分位.
TS-253D Virtualization Station 3 「VM のインポート」
最初うまく起動しなかった(実際は表示がうまくされていなかっただけ?).
「設定」-「ビデオ」-「タイプ」を「Cirrus」になっていたものを「VGA」に.
Virtualization Station 3 「設定」-「ビデオ」-「タイプ」を「VGA」に
これでうまくいった.VNC 接続も問題なし.
Virtualization Station 3  VNC 接続

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

TS-253D セットアップ – 3

他の NAS と同じ様に Google Drive から NAS へのコピー.
HBS 3 Hybrid Backup Sync を利用するみたいだが,いろいろな機能がくっついているので慣れるまでわかり難い.


「同期」-「今すぐ同期」で 3 種類の方法が選べる.
QNAP NAS HBS 3 同期の種類
Google Drive 上のファイルを NAS へコピーなので「一方向同期ジョブ」と思ったが,これは NAS のデータを Cloud にバックアップするためのものみたい.
「双方向同期ジョブ」を選択.
QNAP NAS HBS 3 双方向同期
「アクティブ同期ジョブ」の設定を見ると Google Drive から NAS への矢印になっている.
QNAP NAS HBS 3 アクティブ同期
やりたかったのはこっちの方.
また「アクション」は「ミラー」の方が目的に合っている.

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