ホーム » 検索結果: VS 6 (ページ 4)
検索結果: VS 6
enc_temp_folder
プロジェクトのソースをバックアップしていると,見慣れないフォルダ enc_temp_folder が…
その中には,先日編集した共通のソース combi_f.hpp が存在している.
ソースの中身は正規のものと比べると少し古い.
「enc_temp_folder」で検索すると,VS がクラッシュした時に生成されることがあるみたい.
確かに先日クラッシュした記憶がある.
が,その時バックアップが存在していると言う様なメッセージは気づかなかった.
原因はわかったので,削除することに.
VC プロファイラが…
先日使った VC のプロファイラがうまく動作しなくなった?
動作としては開始するが,結果が取れない.
「CPU 使用率」で,実行中のグラフは表示されている.
実行終了後,下の部分の関数名などが表示される所のデータがうまく生成されない?
次の様にやってもうまくいかない.
MSDN クイック スタート: Visual Studio の CPU 使用率データの分析 (C++)
「手順 2: CPU 使用率データの分析」のデータが取れない.
設定なども確認したが,特に影響しそうな所はわからない.
PC を再起動してもダメ.
何で?
ここに入っている VS 2008 は Team System なので,プロファイラが何とか動くみたい.
結果が表示されるまで時間がかかるのと,ボトルネックを見つけるのに使い勝手があまり良くなさそう.
もう少しあたりを付けて,単体テスト用のコードを書いて調べた方が効率が良さそう.
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 8 などでは効果がなかった(最初から速い).
ここでの検索で一致するデータは,比較的後ろの方に存在することが多いので,後ろから検索する様に変更.
// for (size_t index=0 ; index<pnts.size() ; index++)
for (long index=long(pnts.size())-1 ; index>=0 ; index--)
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 として,処理速度の許容範囲にはなった.
出来上がったデータとして問題ないかの検証はこれから.
検索して一致するデータは,最後と最初に存在することが多いので,その判断部分を変更.
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 に.
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 スタティックだとうまくない?
これはプロジェクトの設定がまずかったためで,別の記事に.
2021/04/01
ちょっとわからないので,リモートデバッグの環境を作成することに.
MSDN Visual Studio での C++ プロジェクトのリモート デバッグ
リモートツールをダウンロードして,インストール.「スタート」から「Remote Debugger」を起動.
リモート側で exe を実行して,ホスト側で「アタッチ」.
2021/04/02
原因は,CRecentFileList::Add を通った時 ::CoInitinalize が呼び出されていないため.
どうも 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 でやっていたと思うが,気づかなかった?
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
これらのコードでの問題は,
* 異常終了が判断できない.
* 変換に時間がかかる時,複数回呼んでしまう.
起動しているかどうかは 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 ; }
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 を利用した単体テスト用コード
VC 14 デバッグ MFC にステップイン
VC 2015 で MFC を使用した SDI.exe をデバッグしていると,MFC のコードにステップインできない?
入っている他の VC で試すと VC 2013 まではうまく機能している.
検索しても,これはという内容には引っ掛からなかった?
アプリケーションクラスの CG3toMApp::InitInstance() を抜ける時,そのままステップ実行していると…
「Microsoft Symbol Servers」にチェックを付けて「読み込み」.
MFC ソース内のデバッグができる様になった.
設定としては「ツール」-「オプション」の中の「デバッグ」-「シンボル」.
2022/02
%TEMP% では消えてしまうので,シンボルキャッシュの場所を変更している.
VC フォールバック 設定
https://itl.mish.work/Iwao/Doc/other/vs/
https://jml.mish.work/index.php/cpp/vs-install.html
ドキュメント付きの起動で抜ける?
個人的なコートでのメモです.
普通に exe を起動してドキュメントを開くのは問題ない.
ドキュメント付きで起動すると,ウィンドウが表示されて,ドキュメントを読込み後終了してしまっている.
デバッガで追いかけると,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;
これをやっていて困ったのが,ソースのタイル表示.
VS 2019 ではうまく動作するが,2017 など他のものではエラーになってしまう.
--------------------------- GLSm140: devenv.exe - アプリケーション エラー --------------------------- 0x000000006359C044 の命令が 0x0000000000000000 のメモリを参照しました。メモリが read になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください --------------------------- OK キャンセル ---------------------------
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 を使う様にすることで回避できる.
VC 6 exe などの場合は (VC6_app).exe.manifest ファイルを用意する.
視覚スタイルを有効にする
構造体の初期化
幾つかの 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 ; }
TS-253D 再セットアップ – 4
QTS で Virtualization Station をクリックすると,
「終了」を押してしばらくすると,
「VM の作成」.
予め iso は NAS にコピー済み.
「OK」を押すと,
ここは「キャンセル」.
「Win10x86」のアイコンを押すと,
「スタート」を押すと,Windows のセットアップが始まる.
後は Windows のいつものインストール動作.
「ローカルアカウント」でインストール.
「VM 情報」を選択して「ゲストツールCDを挿入する」.
ブラウザではあまり反応が良くない気がする.
PC などで操作する場合は VNC クライアント を使用した方が少しは快適.
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
Linux 環境では,~/Documents/tmp/test/
cd ~/Documents/tmp
python3 -m venv test
Win10 .\test\Scripts\activate Ubuntu source ./test/bin/activate
Flask の起動は,環境変数 FLASK_APP を設定して flask run らしい.
サンプルにある内容 を python3 sample.py との違いは?
2020/08/24
VS 2017 での仮想環境の作成は「ソリューション エクスプローラー」-「Python 環境」の「右クリック」にある.
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>
TS-253D セットアップ – 4
Virtualization Station 3 のエクスポート.
先日作成した Win10 を VirtualBox などで開くためにエクスポート.
仮想マシンの下にある「エクスポート」ボタンを押して,*.ovf で「スタート」.
18 GB の img で 40 分位かかった.出力された vmdk は 9 GB .
AS5202T の VirtualBox で「ファイル」-「仮想アプライアンスのインポート」.
変換に 5 分位.
そのまま実行すると 0xc0000225 .
チップセットを「ICH9」,「I/O APIC を有効化」にチェック.
安定して動作はするが,どこかで間違えたみたいでネットワークがうまく機能しない.
PC の VirtualBox で読み込んでみたが,やはりネットワークがうまく動作していない.
今度は VirtualBox のエクスポート.
PC の VirtualBox で「仮想アプライアンスのエクスポート」,AS5202T 上の DevX をエクスポート.50 分位.
QNAP NAS Virtualization Station 3 で「VM のインポート」.20 分位.
最初うまく起動しなかった(実際は表示がうまくされていなかっただけ?).
「設定」-「ビデオ」-「タイプ」を「Cirrus」になっていたものを「VGA」に.
これでうまくいった.VNC 接続も問題なし.
TS-253D セットアップ – 2
今回の NAS で一番気になっている Virtualization Station 3 .
ASUSTOR NAS にも同様の目的の VirtualBox がある が,再起動時の安定度があまり良くない .
2020/09/21 ASUSTOR NAS VirtualBox は 6.1.12 になり安定している.
「Virtualization Station 3」-「VM の作成」.
「OK」で「自動インストール」のメッセージが表示される.
ここは「キャンセル」(「自動インストール」ではうまくいかなかった).
あまり速くない?
ブラウザで操作していたため動きが悪かったのかもしれない.VNC 接続だとそれほど気にならない.
「Guest Tools」のインストールでは「Ultra VNC」もインストール可能になっている.
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_() >>>
AS5202T Debian 10 と VC
VC で ASUSTOR NAS Linux Center の Debian 10 Desktop を使用するための設定.
SSH 接続を可能にして gcc などをインストールしておく必要がある.
Linux development with C++ in Visual Studio
VC の「ツール」-「オプション」,「クロスプラットフォーム」-「接続マネージャー」-「追加」.
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 をご覧ください。
この部分の対応方法はよくわからない.
これでビルドすれば大丈夫なはずだが,何故かエラー.
VC を再起動したり,プロジェクトを読み直したりしていたら通る様になった.
AS5202T に mono インストール
Synology NAS にもあるので気になっていた mono .
以前 MonoDevelop をインストールして少しは試したことがある.
それで,どこまでのものとして入るかをやってみた.
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 $
「mono 使い方」で検索.
mcs test.cs でコンパイル,mono test.exe で実行できるみたい.
2020/06/24
phpinfo() を見てみると mod_mono が読み込まれている.
Win10 2004 インストール
Win10 Ver.2004 があったので VirtualBox 仮想マシンにインストールしてみた.
使用したのは ja_windows_10_business_editions_version_2004_x64_dvd_ee7b2698.iso .
最初,何も考えずにインストールしたら「Microsoft アカウント」と結びついたものになってしまった.
インストール途中で「ローカル アカウント」にする方法は気がつかなかった.
そのため,もう一度やり直し.ネットワークを切断した状態でインストール.
今度はうまくいった.
2020/08/31
ローカルアカウントでインストールするための選択画面
左下の「オフライン アカウント」を選択する.
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>
ショートカット作成
ショートカット作成の 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) ; }
サンプル状態では使い勝手が良くないので,幾つか修正.
HRESULT CreateLink ( LPCTSTR lpszPathObj , // LPCWSTR LPCWSTR lpszPathLink , // LPCSTR LPCTSTR lpszDesc , // LPCWSTR LPCTSTR workingFolder , // 作業フォルダ WORD hotkey = 0 // )
_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_IShellLink は _UNICODE かどうかでそれぞれが使用される.
FBX SDK 2020.0
FBX SDK のページを見たら新しい 2020.0 があった.
ダウンロードしてインストール.
構成マネージャで 2020.0 用の DebugK と ReleaseK を追加.
追加のインクルードディレクトリを 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 をリンク するため,以前にコメントにしていた次の部分を有効に.
これでビルドはできるようになった.
動作確認はこれから.