ホーム » 検索結果: VS 6 (ページ 4)

検索結果: VS 6

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 96,441 アクセス


enc_temp_folder

プロジェクトのソースをバックアップしていると,見慣れないフォルダ enc_temp_folder が…
enc_temp_folder
その中には,先日編集した共通のソース combi_f.hpp が存在している.
ソースの中身は正規のものと比べると少し古い.


enc_temp_folder」で検索すると,VS がクラッシュした時に生成されることがあるみたい.
確かに先日クラッシュした記憶がある.
が,その時バックアップが存在していると言う様なメッセージは気づかなかった.
原因はわかったので,削除することに.

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

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.

MDI exe が動作しない?

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


2021/07/12
一度「開く」ダイアログを表示するとその後はうまく動作する.


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 でやっていたと思うが,気づかなかった?

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

Win 環境で 2 重起動の禁止

ライブラリとして提供されている部分を,他のコードと分離するためコンソール AP(変換 exe)として作成.
テスト用にそれを呼出す部分も別のコンソール AP(呼出 exe)として作成.
変換 exe は,aaa.dat を aaa.txt の様に異なる形式に変換する機能.
呼出 exe は,::ShellExecute(…,”変換.exe aaa.dat”,…) の様に呼出し aaa.txt を処理する.
データにより変換(*.dat から *.txt へ)時間は数秒から数時間.
変換できたかどうかをチェックしている部分は次の様なコード.

for (size_t index=0 ; index<1000 ; index++) {
	::Sleep(100) ;
	if (::File_IsExist(g3d_name))	{	break ;		}
	}

データが悪いのか,ライブラリの問題なのかは不明たが,変換 exe の中でエラーになってしまうことがある.
エラーを軽減する方法はわかっているが,それでも完全ではない.
同じデータでも通る時とそうでないことがあり不安定.
そのため,変換後データが存在しない時に,変換中でなければ「変換 exe」を再起動させなければならない.


2021/03/09
ここまでの部分を単体のコードとして作成.
t_call.cpp
t_conv.cpp
T_mtex_2021_03_09.zip
変換 exe 呼出し 単体テスト
これらのコードでの問題は,
* 異常終了が判断できない.
* 変換に時間がかかる時,複数回呼んでしまう.


起動しているかどうかは Mutex を使えば良さそう.
変換 exe が起動している間,::CreateMutex (…,”入力ファイル名”) で作成したものを保持する.
呼出 exe のループでは,その Mutex が存在するかチェック.
なくなった時に,出力ファイルが存在している時はループを抜ける.
出力ファイルが存在していない時は,もう一度「変換 exe」を呼出す.


今まで作成の Mutex を使用したコード.
Prevent2.hxx Prevent2.cxx
ExclusS.hxx


t_conv.cpp

bool	test	(const tstring& name_in_)
{
	tstring	f_name = ::Path_GetName(name_in_) ; 
	HANDLE	hMutex = ::CreateMutex(NULL,FALSE,f_name.c_str()) ; 
	time_t	now = ::time(NULL) ;
	if ((now % 3) == 0) {
		::Sleep(3000) ;
		tstring	name_out = name_in_ + _T(".out") ;
		tstring	name_uni = ::Get_unique_name(name_out) ;
		::File_CreateEmpty(name_uni) ;
		}
	else {
		::Sleep(500) ;
		}
	::CloseHandle(hMutex) ; 
	return	true ;
	}

t_call.cpp

bool	t_call	(c_tstring& in_name_)
{
	tstring	name_in_ = in_name_ ;
	{
		tstring	f_name = ::Path_GetName(name_in_) ; 
		HANDLE	hMutex = ::CreateMutex(NULL,FALSE,f_name.c_str()) ; 
		DWORD	error  = ::GetLastError() ; 
		::CloseHandle(hMutex) ; 
		if (error == ERROR_ALREADY_EXISTS) { 
			return	true ; 
			} 
		}
	tstring	this_exe = ::i_GetModuleFileName() ;
	tstring	conv_exe = ::Path_AddLastSP(::Path_GetDir(this_exe)) + _T("t_conv.exe") ;
	    	name_in_ = ::QuotM_Add_Auto(name_in_) ;
	//	...
	//	変換 exe を起動
	//	...
	return	true ;
	}

Mutex で exe の起動を管理


2021/03/10 更にクラスに.W_mutex.hxx
次の様にできる.

bool	test	(const tstring& name_in_)
{
	W_mutex	mutex(::Path_GetName(name_in_).c_str()) ; 
	time_t	now = ::time(NULL) ;
	if ((now % 3) == 0) {
		::Sleep(3000) ;
		tstring	name_out = name_in_ + _T(".out") ;
		tstring	name_uni = ::Get_unique_name(name_out) ;
		::File_CreateEmpty(name_uni) ;
		}
	else {
		::Sleep(500) ;
		}
	return	true ;
	}

bool	t_call	(c_tstring& in_name_)
{
	tstring	name_in_ = in_name_ ;
	{
		W_mutex	mutex(::Path_GetName(name_in_).c_str()) ; 
		if (mutex.Is_exist())	{	return	true ;	} 
		}
	tstring	this_exe = ::i_GetModuleFileName() ;
	tstring	conv_exe = ::Path_AddLastSP(::Path_GetDir(this_exe)) + _T("t_conv.exe") ;
	    	name_in_ = ::QuotM_Add_Auto(name_in_) ;
	//	...
	return	true ;
	}

2021/12/01
W_mutex を利用した単体テスト用コード

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

VC 14 デバッグ MFC にステップイン

VC 2015 で MFC を使用した SDI.exe をデバッグしていると,MFC のコードにステップインできない?
入っている他の VC で試すと VC 2013 まではうまく機能している.
検索しても,これはという内容には引っ掛からなかった?


アプリケーションクラスの CG3toMApp::InitInstance() を抜ける時,そのままステップ実行していると…
mfc140ud.i386.pdb は読み込まれていません
「Microsoft Symbol Servers」にチェックを付けて「読み込み」.
MFC ソース内のデバッグができる様になった.


設定としては「ツール」-「オプション」の中の「デバッグ」-「シンボル」.
「ツール」-「オプション」-「デバッグ」-「シンボル」


2022/02
%TEMP% では消えてしまうので,シンボルキャッシュの場所を変更している.
VC 2017 シンボルキャッシュの場所
VC フォールバック 設定


https://itl.mish.work/Iwao/Doc/other/vs/
https://jml.mish.work/index.php/cpp/vs-install.html

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.

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.

構造体の初期化

幾つかの Windows API を呼び出す所を書き換えていて,
RECT や POINT の構造体の初期化で色々と気になり少し調べたことのまとめ.


class として書く場合は,コンストラクタで初期化しているので意識しない.

struct	Vector2	{
//	Vector2	()					{}
	Vector2	(T v=0)		: x(v),	y(v)		{}
	Vector2	(T x, T y)	: x(x),	y(y)		{}
//	...
	T	x ;
	T	y ;
	} ;

MFC を使用している時も同様.

	CRect	rect(0,0,0,0) ;

他の Win32 の構造体だと

	MEMORYSTATUSEX	memStat ;
	memset(&memStat,0,sizeof(MEMORYSTATUSEX)) ;
	memStat.dwLength= sizeof(MEMORYSTATUSEX) ;
	::GlobalMemoryStatusEx(&memStat) ;

Windows では ::ZeroMemory を使っていることもあり.

#define ZeroMemory(pb,cb)           memset((pb),0,(cb))

これまで RECT を 0 にする場合,次の様にも書いていた.

	RECT	rect = { 0,0,0,0 } ;

次の様に省略する方法もあるのは知っていたがあまり使っていない.

	RECT	rect = { 0 } ;

K & R 2nd の A8.7 に書かれている.
Web で検索すると ” RECT rect = { } ; ” の様な記述もあったが,これはどうかと…


構造体のコピーや戻り値は悩む所.
RECT の様な単純な構造では特に問題ないと思う.
XML などのツリー構造の場合はデータにより時間がかかるので注意が必要.


2020/10/13
次の様なコードで動作 を確認.

struct	strct_c	{
	i__8	i1 ;
	i_32	i4 ;
	i_16	i2 ;
	i_64	i8 ;
	} ;

bool	test_struct	(void)
{
	strct_a	sa_rn ;
	strct_b	sb_rn ;
	strct_c	sc_rn ;
	strct_a	sa_f0 = {1,2,3,4} ;
	strct_b	sb_f0 = {1,2,3,4} ;
	strct_c	sc_f0 = {1,2,3,4} ;
	strct_a	sa__0 = {0} ;
	strct_b	sb__0 = {0} ;
	strct_c	sc__0 = {0} ;
	strct_a	sa_m0 ;	memset(&sa_m0,0,sizeof(sa_m0)) ;
	strct_b	sb_m0 ;	memset(&sb_m0,0,sizeof(sb_m0)) ;
	strct_c	sc_m0 ;	memset(&sc_m0,0,sizeof(sc_m0)) ;
	::dump_mem(&sc_rn,sizeof(sc_rn)) ;
	::dump_mem(&sc_f0,sizeof(sc_f0)) ;
	::dump_mem(&sc__0,sizeof(sc__0)) ;
	::dump_mem(&sc_m0,sizeof(sc_m0)) ;
	return	true ;
	}

構造体の初期化 VC6
構造体の初期化 ASUSTOR NAS AS5202T
ある程度は予想通り…
パディング部分の扱いが異なるのでコードによっては注意が必要.

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

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

QTS で Virtualization Station をクリックすると,
Virtualization Station にようこそ
「終了」を押してしばらくすると,
QNAP VirtualizationStation 3
「VM の作成」.
予め iso は NAS にコピー済み.
QNAP  VS3  VM の作成
「OK」を押すと,
QNAP VM3  自動インストール
ここは「キャンセル」.
QNAP VS3  VM のリスト
「Win10x86」のアイコンを押すと,
QNAP  VS3  Win10x86  スタート
「スタート」を押すと,Windows のセットアップが始まる.
QNAP VS3  Win10 セットアップ
後は Windows のいつものインストール動作.
「ローカルアカウント」でインストール.
QNAP VS3  Win10 ローカルアカウント
「VM 情報」を選択して「ゲストツールCDを挿入する」.
QNAP VM3 ゲストツールCD の挿入
QNAP VM3  ゲストツールのインストール
QNAP VM3  ゲストツールのインストール VNC
ブラウザではあまり反応が良くない気がする.
PC などで操作する場合は VNC クライアント を使用した方が少しは快適.

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

Python venv

次の所を参考にして…
VS CodeとFlaskによるWebアプリ開発「最初の一歩」
https://kazuhira-r.hatenablog.com/entry/2019/01/09/231800


cd %TMP% で移動し temp\test\ 以下に作成.
py -m venv temp\test
Win10 環境で py -m venv ...
Linux 環境では,~/Documents/tmp/test/
cd ~/Documents/tmp
python3 -m venv test
Ubuntu 環境で python3 -m venv ...


Win10   .\test\Scripts\activate
Ubuntu  source ./test/bin/activate

Flask の起動は,環境変数 FLASK_APP を設定して flask run らしい.
サンプルにある内容 を python3 sample.py との違いは?


2020/08/24
VS 2017 での仮想環境の作成は「ソリューション エクスプローラー」-「Python 環境」の「右クリック」にある.
VS 2017 Python 仮想環境を追加

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

Python から C の呼出し – 3

Win10 環境に入っている Python.h を検索.

C:\Users\Iwao> where /R \ Python.h
C:\CocosCreator\resources\utils\Python27\include\Python.h
C:\Microsoft\AndroidNDK64\android-ndk-r15c\prebuilt\windows-x86_64\include\python2.7\Python.h
C:\Microsoft\AndroidNDK64\android-ndk-r16b\prebuilt\windows-x86_64\include\python2.7\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\Python\Core\Packages\ptvsd\_vendored\pydevd\pydevd_attach_to_process\dll\python.h
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\Python\Core\Packages\ptvsd\_vendored\pydevd\pydevd_attach_to_process\linux\python.h
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\Python\Core\debugpy\_vendored\pydevd\pydevd_attach_to_process\common\python.h
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\Python\Miniconda\Miniconda3-x64\include\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\include\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\pkgs\python-3.6.5-h0c2934d_0\include\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\include\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_86\include\Python.h
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\include\Python.h
C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r11c\prebuilt\windows-x86_64\include\python2.7\Python.h
C:\salt\bin\include\Python.h
C:\Users\All Users\Microsoft\AndroidNDK64\android-ndk-r11c\prebuilt\windows-x86_64\include\python2.7\Python.h
C:\Users\Iwao\AppData\Local\Microsoft\Linux\HeaderCache\1.0\-1863842710\usr\include\python2.7\Python.h
C:\Users\Iwao\AppData\Local\Microsoft\Linux\HeaderCache\1.0\-1863842710\usr\include\python3.7\Python.h
C:\Users\Iwao\AppData\Local\Microsoft\Linux\HeaderCache\1.0\-1863842710\usr\include\python3.7m\Python.h
C:\Windows.old\Users\All Users\Microsoft\AndroidNDK64\android-ndk-r11c\prebuilt\windows-x86_64\include\python2.7\Python.h

C:\Users\Iwao>  

Win10 環境の Python.h


https://jml.mish.work/python/call-c-python.html

Is this 投稿 useful? Useful Useless 0 of 1 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 セットアップ – 2

今回の NAS で一番気になっている Virtualization Station 3
ASUSTOR NAS にも同様の目的の VirtualBox がある が,再起動時の安定度があまり良くない
2020/09/21 ASUSTOR NAS VirtualBox は 6.1.12 になり安定している.


「Virtualization Station 3」-「VM の作成」.
Virtualization Station 3  VM の作成
「OK」で「自動インストール」のメッセージが表示される.
Virtualization Station 3 「自動インストール」の確認
ここは「キャンセル」(「自動インストール」ではうまくいかなかった).
Virtualization Station 3 Win10 インストール開始
Virtualization Station 3 Win10 インストール終了
あまり速くない?
Virtualization Station 3 QNAP Guest Tools のインストール
ブラウザで操作していたため動きが悪かったのかもしれない.VNC 接続だとそれほど気にならない.
「Guest Tools」のインストールでは「Ultra VNC」もインストール可能になっている.

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

Python から CPP の呼出し

雰囲気はつかめてきたので,以前作成した cpp を呼んでみることに…
実際の処理部分は C++ のコードだが,呼び出しは C の関数.
また引数もない状態なので,C 関数の system(“a.out”) と呼んでいるのと同様.

#include	"i_rd_dbg.hxx"
int _tmain(int argc, TCHAR* argv[])
{
	::Test_Revise_deg() ;
	return 0 ;
	}

#include	<Python.h>
#include	"i_rd_dbg.hxx"
#include	"messbar.cxx"

static	PyObject*	call_cpp(PyObject* self, PyObject* args)
{
	::Test_Revise_deg() ;
	return	Py_None ;
	}

static	PyMethodDef 	 	myMethods[] = {
	{	"_call_cpp_",	call_cpp,	METH_NOARGS,	"call cpp"		},
	{	NULL														},
	} ;

static	struct	PyModuleDef	call_mod = {
	PyModuleDef_HEAD_INIT,
	"call_mod",
	"call_cpp module",
	-1,
	myMethods
	} ;

PyMODINIT_FUNC	PyInit_call_mod(void)
{
	return	PyModule_Create(&call_mod) ;
	}

コンパイルして import まではできたが,メソッドをうまく呼び出せない.
>>> call_mod.call_cpp()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module ‘call_mod’ has no attribute ‘call_cpp’
>>>
それで,メソッドを表示できないかと思い検索すると,
python でメソッドの一覧を取得する方法
他に dir(call_mod) もあった.

Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/T_Rvs_sc $ g++ rvs_sc_w.cpp -o call_mod.so  -fPIC -Wall -shared -I /volume1/.@plugins/AppCentral/python3/include/python3.7m/
Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/T_Rvs_sc $
Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/T_Rvs_sc $ python3
Python 3.7.0 (default, Aug 23 2018, 17:48:39)
[GCC 4.6.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import call_mod
>>> call_mod.call_cpp
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'call_mod' has no attribute 'call_cpp'
>>> call_mod.call_cpp()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'call_mod' has no attribute 'call_cpp'
>>> obj = call_mod
>>> import inspect
>>> for m in inspect.getmembers(obj):
...     print(m)
...
('__doc__', 'call_cpp module')
('__file__', '/volume1/home/Iwao/test/test_py/call_c/call_cpp/T_Rvs_sc/call_mod.so')
('__loader__', <_frozen_importlib_external.ExtensionFileLoader object at 0x7f5a1a35ec50>)
('__name__', 'call_mod')
('__package__', '')
('__spec__', ModuleSpec(name='call_mod', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x7f5a1a35ec50>, origin='/volume1/home/Iwao/test/test_py/call_c/call_cpp/T_Rvs_sc/call_mod.so'))
('_call_cpp_', <built-in function _call_cpp_>)
>>> call_mod._call_cpp_()
>>>

Python から cpp の呼出し メソッドの表示

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

AS5202T Debian 10 と VC

VC で ASUSTOR NAS Linux Center の Debian 10 Desktop を使用するための設定.


SSH 接続を可能にして gcc などをインストールしておく必要がある.
Linux development with C++ in Visual Studio


VC の「ツール」-「オプション」,「クロスプラットフォーム」-「接続マネージャー」-「追加」.
Debian 10 への接続の設定
SSH 接続する時の情報を設定する.
追加後「接続マネージャー」-「リモートヘッダー…」で「更新」するとエラー.
エラーが発生しました。Could not start the ‘rsync’ command on the remote host, please install it using your system package manager. Please see https://aka.ms/AA23jat for troubleshooting。詳細については、C:\Users\Iwao\AppData\Local\Temp\vslinux_header_update_log.txt を参照してください。トラブルシューティングを行うには、https://aka.ms/AA23jat をご覧ください。
エラーが発生しました。Could not start the 'rsync' command on the remote host, please install it using your system package manager.
この部分の対応方法はよくわからない.


VC のプロジェクトの設定を「lxcdebian10」に.
VC リモートビルドマシンを「lxcdebian10」に設定


これでビルドすれば大丈夫なはずだが,何故かエラー.
VC を再起動したり,プロジェクトを読み直したりしていたら通る様になった.
AS5202T Debuan 10 VC ビルド

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

AS5202T に mono インストール

Synology NAS にもあるので気になっていた mono
以前 MonoDevelop をインストールして少しは試したことがある.
それで,どこまでのものとして入るかをやってみた.
AS5202T App Central Mono

Iwao@AS5202T:/volume1/home/Iwao/test/mono $ ls /usr/local/AppCentral/mono/bin/
al*                        gacutil2*                  mono-api-info*             nunit-console2*
al2*                       genxs*                     mono-boehm*                nunit-console4*
asp-state*                 httpcfg*                   mono-cil-strip*            pdb2mdb*
asp-state2*                ikdasm*                    mono-configuration-crypto* pedump*
asp-state4*                ilasm*                     mono-find-provides*        permview*
caspol*                    illinkanalyzer*            mono-find-requires*        peverify*
cccheck*                   installvst*                mono-gdb.py                resgen*
ccrewrite*                 lc*                        mono-heapviz*              resgen2*
cert-sync*                 macpack*                   mono-package-runtime*      secutil*
cert2spc*                  makecert*                  mono-service*              setreg*
certmgr*                   mconfig*                   mono-service2*             sgen*
chktrust*                  mcs*                       mono-sgen*                 sgen-grep-binprot*
crlupdate*                 mdassembler*               mono-sgen-gdb.py           signcode*
csc*                       mdbrebase*                 mono-shlib-cop*            sn*
csc-dim*                   mdoc*                      mono-symbolicate*          soapsuds*
csharp*                    mdoc-assemble*             mono-test-install*         sqlmetal*
csi*                       mdoc-export-html*          mono-xmltool*              sqlsharp*
dbsessmgr*                 mdoc-export-msxdoc*        monodis*                   svcutil*
dbsessmgr2*                mdoc-update*               monodocer*                 vbc*
dbsessmgr4*                mdoc-validate*             monodocs2html*             wsdl*
disco*                     mdvalidater*               monodocs2slashdoc*         wsdl2*
dmcs*                      mkbundle*                  monograph*                 xbuild*
dtd2rng*                   mod*                       monolinker*                xsd*
dtd2xsd*                   mod-mono-server*           monop*                     xsp*
fastcgi-mono-server*       mod-mono-server2*          monop2*                    xsp2*
fastcgi-mono-server2*      mod-mono-server4*          mozroots*                  xsp4*
fastcgi-mono-server4*      mono@                      mprof-report*
gacutil*                   mono-api-html*             nunit-console*
Iwao@AS5202T:/volume1/home/Iwao/test/mono $                      

AS5202T AppCentral mono bin
mono 使い方」で検索.
mcs test.cs でコンパイル,mono test.exe で実行できるみたい.


2020/06/24
phpinfo() を見てみると mod_mono が読み込まれている.
AS5202T phpinfo() apache2handler mod_mono


mcs で出来上がった exe は Windows のコマンドプロンプトで実行できる.
Mono 環境でできた exe を実行

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

Win10 2004 インストール

Win10 Ver.2004 があったので VirtualBox 仮想マシンにインストールしてみた.
使用したのは ja_windows_10_business_editions_version_2004_x64_dvd_ee7b2698.iso .


最初,何も考えずにインストールしたら「Microsoft アカウント」と結びついたものになってしまった.
インストール途中で「ローカル アカウント」にする方法は気がつかなかった.


そのため,もう一度やり直し.ネットワークを切断した状態でインストール
今度はうまくいった.
Win10 2004 「ローカルアカウント」でインストール


2020/08/31
ローカルアカウントでインストールするための選択画面
ローカルアカウントでインストールするための選択画面
左下の「オフライン アカウント」を選択する.


2020/09/20
次の画面の場合は「代わりにドメインに参加する」を選択.
Win10 LTSC 2019 「ローカルアカウント」の入力に

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

VC /LARGEADDRESSAWARE

64 ビットバイナリの作成に関して調べていて /LARGEADDRESSAWARE を見つけたのでメモ.
/LARGEADDRESSAWARE (大きいアドレスの処理)
これを有効にすると 64 ビット環境で 2 GB を超えるメモリを利用できるみたい.
プロジェクトの「プロパティ」-「構成プロパティ」-「リンカ」-「システム」-「大きいサイズのアドレス」
「プロパティ」-「構成プロパティ」-「リンカ」-「システム」-「大きいサイズのアドレス」


次の様なコードで動作を確認.

#include	<iostream>
#include	"memstat.hxx"
#include	"gettickc.hxx"

int		_tmain	(int argc, TCHAR* argv[])
{
	u_32	free_M = 0 ;
	{
		MemoryStatus	ms ;
		std::tout << long(ms.GetPhysFree()/1024/1024) << std::endl ;
		free_M = u_32(ms.GetPhysFree ()/1024/1024) ;
		}
	{
		std::vector <void*>	memAry(1024,(void*)NULL) ;
		u_32	index =0 ;
		u_32	allocTotal = 0 ;
		u_32	allocSize = free_M/2 ;
		u_32	ngCount = 0 ;
		for (index=0 ; index<free_M && ngCount<10 ; ) {
			if (allocSize == 0)	{	break ;		}
			void*	pAlloc = calloc(allocSize,1024*1024) ;
			if (pAlloc != NULL) {
				allocTotal += allocSize ;
				}
			else {
				allocSize /= 2 ;
				ngCount++ ;
				continue ;
				}
			MemoryStatus	ms ;
			std::tout  <<  allocSize  <<  _T("\t") << allocTotal << _T("\t") << long(ms.GetPhysFree()/1024/1024) << std::endl ;
			free_M = u_32(ms.GetPhysFree ()/1024/1024) ;
			memAry.at(index) = pAlloc ;
			::Sleep_ms(1000) ;
			index++ ;
			if (ngCount > 100)	{	break ;		}
			}
		for (index=0 ; index<free_M ; index++) {
			void*	pAlloc = memAry.at(index) ;
			free(pAlloc) ;
			}
		}
	return 0;
	}

/LARGEADDRESSAWARE を有効にすることで 4 GB まで確保できている.

Microsoft Windows [Version 10.0.18362.592]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_m_stat\release.080\T_m_stat.exe
3845
961     961     3844
480     1441    3847
240     1681    3845
120     1801    3845
120     1921    3845
60      1981    3837
15      1996    3836
7       2003    3830
7       2010    3830
7       2017    3831
3       2020    3826
3       2023    3826

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\release.080\T_PhysF.exe
3814
1907    1907    3814
953     2860    3801
476     3336    3799
238     3574    3799
119     3693    3800
119     3812    3790
119     3931    3789
59      3990    3788
29      4019    3792
14      4033    3787
14      4047    3787
7       4054    3787
7       4061    3786
3       4064    3778
3       4067    3781
3       4070    3781
3       4073    3781

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>

以下は,デバッグ版とリリース版での違い.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\debug.080\T_PhysF.exe
4606
1151    1151    3461
1151    2302    2300
575     2877    1713
575     3452    1188
287     3739    915
143     3882    758
71      3953    671
35      3988    629
17      4005    600
17      4022    582
17      4039    554
8       4047    566
8       4055    554
8       4063    539
4       4067    527

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\release.080\T_PhysF.exe
4406
1101    1101    4394
1101    2202    4401
550     2752    4393
550     3302    4403
275     3577    4403
137     3714    4403
68      3782    4403
68      3850    4403
68      3918    4402
34      3952    4502
34      3986    4503
17      4003    4501
17      4020    4502
17      4037    4499
17      4054    4498
8       4062    4499
8       4070    4498
4       4074    4497

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>

デバッグ版では空きメモリが減っている


2020/02/05
(VS)\VC\bin\EditBin.exe でも同様の設定ができるみたい.
EDITBIN リファレンス
“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\editbin.exe/LARGEADDRESSAWARE C:\Users\Iwao\AppData\Local\Temp\i_Tools.tmp\CopyNewF\20200204\T_Phys_L.exe


2020/02/14
確保したメモリのアドレスを表示する様にしてみた.

Microsoft Windows [Version 10.0.18362.657]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Iwao>\\TestXP\C_Temp\TestCPP\T_mem\T_m_stat\Release.060\T_m_s_2.exe
2030
1015    1015    2030    0000000000878020
507     1522    2030    000000003ff83020
253     1775    2030    000000005fa90020
126     1901    2029    00000000772a7020
63      1964    2029    000000006f7a6020
15      1979    1950    00000000736b7020
15      1994    1947    0000000074f65020
7       2001    1949    0000000075e73020
7       2008    1949    000000007f0b6020
3       2011    1946    0000000074868020
3       2014    2007    0000000074b7d020
3       2017    2009    000000007658e020
3       2020    2010    0000000076890020
3       2023    2011    000000007f7cb020
3       2026    2012    000000007fada020
1       2027    2013    00000000005f2020
1       2028    2013    00000000745c8020
1       2029    2013    0000000076e05020
1       2030    2013    0000000076f14020

abnormal program termination

C:\Users\Iwao>\\TestXP\C_Temp\TestCPP\T_mem\T_m_stat\Release.060\T_m_s_4.exe
1935
967     967     1935    000000000087a020
967     1934    1996    000000007fff7020
967     2901    1996    ffffffffbc70c020
483     3384    1995    000000003cf8e020
241     3625    1996    000000005b293020
120     3745    1997    000000006a3a8020
120     3865    1994    00000000772aa020
60      3925    1996    fffffffff8e1d020
30      3955    1996    0000000071bbc020
30      3985    1996    fffffffffca2c020
15      4000    1874    0000000074f66020
15      4015    1832    000000007eab8020
15      4030    1996    fffffffffe838020
7       4037    2102    00000000739cd020
7       4044    2139    0000000075e7e020
3       4047    2181    00000000740dc020
3       4050    2254    00000000743ed020
3       4053    2255    0000000074868020
3       4056    2255    0000000074b76020
3       4059    2261    0000000076583020
3       4062    2372    000000007689f020
3       4065    2371    000000007f9c0020
3       4068    2371    000000007fcd5020
3       4071    2371    ffffffffff743020
3       4074    2372    ffffffffffa50020
1       4075    2372    00000000006ec020
1       4076    2296    0000000076e04020
1       4077    2296    0000000076f19020

abnormal program termination

C:\Users\Iwao>

/LARGEADDRESSAWARE を有効にした時の確保したメモリのアドレス

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

ショートカット作成

ショートカット作成の CreateLink のドキュメントの場所など
CreateLink
CSIDL
KNOWNFOLDERID


サンプルの ::CreateLink を利用したコード.
呼出している所は次の様なコード.lnk がなければ CreateLink .あれば削除.
UNICODE 版としてビルドする必要がある.

	if (_taccess(lnk_path,0) != 0) {
		::CoInitialize(NULL) ;
		char	mb_lnk_path[MAX_PATH] ;
		::WideCharToMultiByte(CP_ACP,0,lnk_path,-1,mb_lnk_path,MAX_PATH,NULL,NULL) ;
		::CreateLink(exe_path,mb_lnk_path,descript) ;
		::CoUninitialize() ;
		}
	else {
		_tremove(lnk_path) ;
		}

CreatLnk.cpp
CreatLnk.zip


サンプル状態では使い勝手が良くないので,幾つか修正.

HRESULT	CreateLink	(
	LPCTSTR	lpszPathObj ,		//	LPCWSTR
	LPCWSTR	lpszPathLink ,		//	LPCSTR
	LPCTSTR	lpszDesc ,		//	LPCWSTR
	LPCTSTR	workingFolder ,		//	作業フォルダ
	WORD	hotkey = 0		//	
	)

CreatLnk.hxx
CreateLink


_UNICODE を指定してビルドすると

--------------------構成: T_Lnk - Win32 Release--------------------
コンパイル中...
T_Lnk.cpp
\\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(83) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
\\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(103) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
\\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : error C2664: 'wcstoul' : 1 番目の引数を 'const char *' から 'const unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照)
        指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
\\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : fatal error C1903: 直前のエラーを修復できません; コンパイルを中止します。
cl.exe の実行エラー
T_Lnk.exe - エラー 4、警告 0

UNICODE などの定義が矛盾していることがあるのでそれを最初に指定する.
// (VS8)\VC\AtlMFC\Include\AfxV_W32.h

#ifdef	_MSC_VER
	#ifdef		_UNICODE
		#ifndef	 UNICODE
		#define	 UNICODE		// UNICODE is used by Windows headers
		#endif
	#endif
	#ifdef		 UNICODE
		#ifndef	_UNICODE
		#define	_UNICODE		// _UNICODE is used by C-runtime/MFC headers
		#endif
	#endif
#endif

https://dev.mish.work/wordpress/2020/09/25/i_def_aw-hxx/


2020/10/14
作成した CreateLink の引数.
IID_IPersistFile の Save は LPCOLESTR になっている.
IID_IPersistFile
IID_IShellLink は _UNICODE かどうかでそれぞれが使用される.
IID_IShellLink


lnk 作成

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

FBX SDK 2020.0

FBX SDK のページを見たら新しい 2020.0 があった.
FBX SDK 2020.0
ダウンロードしてインストール.
構成マネージャで 2020.0 用の DebugK と ReleaseK を追加.
「構成マネージャー」で 2020.0 用の追加
追加のインクルードディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\include;%(AdditionalIncludeDirectories)
追加のライブラリディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\lib\vs2017\x64\Release;%(AdditionalLibraryDirectories)
LibXml2 と ZLib をリンク するため,以前にコメントにしていた次の部分を有効に.
LibXml2-MD.lib と ZLib-MD.lib をリンクする様に
これでビルドはできるようになった.
動作確認はこれから.

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