ホーム » Iwao の投稿 (ページ 15)

作者アーカイブ: Iwao

2025年5月
 123
45678910
11121314151617
18192021222324
25262728293031

カテゴリー

アーカイブ

ブログ統計情報

  • 112,913 アクセス


削除中にエラーが発生しました

また,削除できないキーができてしまった.
[Window Title]
キーの削除エラー
[Content]
・ を削除できません。削除中にエラーが発生しました。
[OK]
レジストリエディタ キーの削除エラー
RegDelNull を探すと,場所が変わっていた.
RegDelNull v1.11
使い方は以前と同じ

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

C:\Users\Iwao>cd %TMP%

C:\Users\Iwao\AppData\Local\Temp>J:\Download\Tools\MS\Regdelnull\RegDelNull.exe

RegDelNull v1.11 - Delete Registry keys with embedded Nulls
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Scan complete.


C:\Users\Iwao\AppData\Local\Temp>J:\Download\Tools\MS\Regdelnull\RegDelNull.exe hkcu\SOFTWARE\Iwao\****\x86\BAPMan

RegDelNull v1.11 - Delete Registry keys with embedded Nulls
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Null-embedded key (Nulls are replaced by '*'):

HKCU\SOFTWARE\IWAO\****\X86\BAPMAN\?*

Delete? (y/n) y
Key successfully deleted.

Scan complete.


C:\Users\Iwao\AppData\Local\Temp>

RegDelNull の使い方

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

::SetWindowPos(hWnd,…)

wndTopMost で,Z オーダーの最前面に.

{
	CRect	rect ;
	GetWindowRect(&rect) ;
	SetWindowPos(&wndTopMost,rect.left,rect.top,0,0,SWP_NOSIZE|SWP_NOACTIVATE) ;
	}

幾つかの環境ではこれでうまく動作している.


今日作成したツールの CMSetNmTDlg::OnInitDialog() にこれを追加.
omp_set_num_threads
Win10 のホスト環境で最前面に移動しない.
仮想マシンで試すと意図した動作.
ホストの,以前に起動したツールは前面のまま保持された.
が,一度終わらせて再起動したら,最前面にならなくなった.
ちょっとよくわからないが,何かが邪魔しているのか?
PC を再起動すれば直るかもしれないが…
とりあえずメモ.


2021/10/25
explorer.exe の再起動でうまく動作する様になったみたい.


他 AP などからの操作の場合 SetForegroundWindow


2023/07/12
Windows API だと次の様に指定できる.

::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE) ;

2 つ目の引数は次のものが指定可能.

#define HWND_TOP        ((HWND)0)
#define HWND_BOTTOM     ((HWND)1)
#define HWND_TOPMOST    ((HWND)-1)
#define HWND_NOTOPMOST  ((HWND)-2)

::SetWindowPos   Flags


2024/12/04
MFC では次の方が簡単?

{
	SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE) ;
	}
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

ADM 更新で WordPress が…

スマートフォンの AiMaster で ASUSTOR NAS にアクセスすると ADM のアップデートがあった.
特に気にすることなく更新.
その後,この NAS の WordPress のページにアクセスしようとすると開けない.404 になってしまう.
AiMaster ではわかり辛いので,今度は PC から ASUSTOR NAS へアクセス.
すると WordPress などがグレーになっている.
ネットワーク上などから WordPress のフォルダも見えない.



App Central で確認すると WordPress などの機能が無効(OFF)になっている.
画像をとり損ねたが,ON にしようとすると「MariaDB の更新が必要」とのメッセージが表示された.
MariaDB に入ると更新が始まった.
ADM 4  MariaDB 更新
更新後,App Central で WordPress などを ON に.
ちゃんと動作する様になった.

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

FBX SDK 2020.2.1 に更新

FBX SDK を 2020.2.1 に更新.
プロジェクト設定の,インクルードとライブラリのディレクトリを変更.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.2.1\include;%(AdditionalIncludeDirectories)
FBX SDK 2020.2.1 include
C:\Program Files\Autodesk\FBX\FBX SDK\2020.2.1\lib\vs2019\x86\$(Configuration);%(AdditionalLibraryDirectories)
FBX SDK 2020.2.1 Lib
特に問題なくビルド完了.動作テストはこれから.


#pragma comment (lib, “LibFbxSDK-MD.lib”) などの設定は次の所に書いている.
https://jml.mish.work/index.php/cpp/fbx-sdk-setting.html

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

高 DPI

先日の更新で,ツールバーのボタンが小さくなった?という報告を受けたので,ちょっとまとめてみた.

DPI 認識 DPI 対応 「互換性」タブ
なし 非対応 システム
高い DPI 認識 システム  
モニターごとの高い DPI 認識 モニターごと アプリケーション

プロジェクトの「プロパティ」-「マニフェストツール」-「DPI 認識」
「タスクマネージャー」での表示
上から,非対応,システム,モニターごとx2 .下から 2 つ目は,100% のディスプレイから移動したもの.
GLSmth の「バージョン情報」

高 DPI デバイスでの Windows のスケーリングの問題
PROCESS_DPI_AWARENESS enumeration (shellscalingapi.h)
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\ShellScalingApi.h

いろいろ試したが,特にツールバーボタンの関係ではわからなかった.


2021/10/14
どうも,プライマリディスプレイの設定によりスケーリング動作が異なる?
ImageLook タスクマネージャ
125% にしたもの.
プライマリディスプレイを 125% に
右下の 3 つのツールバーとダイアログの大きさなどがスケーリングされない.
それら以外の,メニューやステータスバーなどは正しくスケーリングされている様に見える.
VirtualBox の「スケールモード」で 80% 程度にしたもの.
80% 程度にして,ホストのウィンドウを重ね合わせ


exe のプロパティで「アプリケーション」としたもの.
exe のプロパティで「アプリケーション」に
ダイアログのフォントに固定サイズのものを使用しているので少し文字間隔が広くなってしまっている.
https://jml.mish.work/index.php/i-tools/setcolt.html

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

コンソール AP での色

以前に NAS に SSH 接続した環境で,文字色などの変更 をやった.
確か DOS 時代に少し使った記憶があるが,コンソール AP で使ってみたいと思い調べてのメモ.


先ず,コマンドプロンプトでの動作から.
echo ^G
echo Ctrl+G   BEL
‘^G’ の入力は,「Ctrl」+「G」.
「Enter」すると,ブザー(BEL)が鳴る.
今度は,次の様なバイナリデータのファイルを用意しての表示.
ESC シーケンス バイナリデータ
それを type で表示する(Linux 環境などでは cat ).
type esc.txt
type esc.txt の結果
echo を使っての ‘ESC [‘ 入力がわからなかったが,いろいろ試すと「Ctrl」+「[」で入った.
echo ^[[103m
echo ^[[30m
echo ^[[103m    echo ^[[30m
最初わからなかったが,Linux 環境などでは
echo -e “\x1b[103m”
BEL の所に書いてあった.


以前試した時もそうだったと思うが,コマンドプロンプトでそのまま実行してもうまく機能しない.
またその頃はまだメインの開発機は Win7 だったこともありそれ以上は試していなかった.
以前の T_esc 2018 05 exe
一度ファイルにリダイレクトして type すると意図した動作になる.
Windows ESC CSI」で検索すると次の所が見つかる.
コンソールの仮想ターミナル シーケンス
ここを見ると ::SetConsoleModeENABLE_VIRTUAL_TERMINAL_PROCESSING を指定するとある.
それで次の様なコードで試すとうまくいった.

#ifdef		_WIN32
	#ifdef	ENABLE_PROCESSED_OUTPUT
		#ifndef	ENABLE_VIRTUAL_TERMINAL_PROCESSING
		#define	ENABLE_VIRTUAL_TERMINAL_PROCESSING	0x0004
		#endif
	#endif
#endif
//	...
{
//	...
	can_CSI = true ;
	#ifdef		_WIN32
		BOOL	can_ESC = FALSE ;
		#ifdef	ENABLE_PROCESSED_OUTPUT
			HANDLE	hout =	::GetStdHandle(STD_OUTPUT_HANDLE) ;
			DWORD	mode = 0 ;
					::GetConsoleMode(hout,&mode) ;
				mode|= ENABLE_VIRTUAL_TERMINAL_PROCESSING ;
			can_ESC =	::SetConsoleMode(hout, mode) ;
		#endif
		can_CSI = (can_ESC == TRUE) ;
	#endif
	if (change_bg) {
		if (can_CSI) {
			std::terr << _T("\x1b[107m") ;
			std::terr << _T("\x1b[30m") ;
			std::terr << _T("\x1b[0J") ;
		//	std::terr << _T("\x1b[;H") ;
			}
		}
//	...
	}

CSI.hxx
CSI クラスを使用したもの
ちょっとうまくない部分もある?が,何とか.


python だと

from ctypes import windll , wintypes , byref
kernel = windll.kernel32
hout = kernel.GetStdHandle(-11)
mode = wintypes.DWORD()
kernel.GetConsoleMode(hout,byref(mode))
mode.value |= 4
kernel.SetConsoleMode(hout,mode)
print ('\033[96m')

参考にさせてもらったところ.
第3章5 エスケープシーケンスで文字の色、背景の色を変更


2023/03/24
次の様に利用できる.

#include	<iostream>

#include	"CSI.hxx"
#include	"tstring.hxx"

int	_tmain	(int argc,TCHAR* argv[])
{

	CSI	csi ;

	{
		tstring	buf ;
		buf.resize(1000) ;
		std::terr << _T("wait...") ;
		std::tin.getline(&buf[0],std::streamsize(buf.size())) ;
		}
	return	0 ;
	}

CSI クラスの利用

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

CCmdUI::SetText

以前,VC 11 以降で メニューのテキストがうまく更新できない 現象があった.
この時,オーナードローを使っている所は解決した(個人的なコードのバグだった).
が,普通のサブメニューの方はうまくないままとなっていて,それを今回改めて調べてみた.


デバッガで追いかけると,CcmdUI::SetText は呼ばれている.
MFC のコードを見ると,ModifyMenu と SetMenuItemInfo の違いがある.
MFC 10 と 11 の CCmdUI::SetText


サブメニューの場合にうまくないのかと思い,単体テスト用のコードを書いてみたが,再現できない.

void CM_textView::OnUpdateMenuItem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CString	now = CTime::GetCurrentTime().Format(_T("%H:%M:%S")) ;
	pCmdUI->SetText(now) ;
	}

void CM_textView::OnMenuItem(UINT nID) 
{
	// TODO: Add your command handler code here
	}

何か他の条件があるみたい.


CMenu::TrackPopupMenu で表示するメニューではうまく更新されている.
メニューバーの項目としてコマンドを割り当て,そこから TrackPopupMenu を呼出すことで対応.

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

DSM 7 と WordPress , Joomla!

2021/07 に Synology NAS の DSM を更新
WordPress は動作しているが Joomla! はうまくないまま.


今日 Maria DB と WordPress ,Joomla! の更新版があったので更新した.
DSM 7  WordPress
前回と同様 でうまく開かない.
WordPress のインストールされたところをみると .htaccess が存在しない.
以前バックアップしたものをコピー.
これで WordPress はうまく動作する様になった.
Joomla! の方は相変わらず.


2022/02
Joomla! は …/joomla/index.php/… の形式であれば問題ない.
そのため,直接参照している所に index.php/ を付加することで対応した.

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

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

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

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

VS 6 RTM bug … ?

Win10 環境に入れた VC 6 でビルドした exe をテストしていると…
VC 6 RTM
「何か修正を間違えた?」と思い,幾つかの exe で実行するとうまくいく.
VC 6 SP6
VC 14 などでビルドしたものや,VC 6 デバッグビルドのものは OK .
2021/06 頃からの VC 6 リリースビルドのものがうまくなさそう.
WinXP 環境の VC 6 でビルドしたものも OK .
Win10 に入れた VS 6 が英語版だったので,SP はまだ入れていない.


2021/08/17
VC 6 RTM で作成される exe がうまくないものと思われる.
3D データ変換の状況


2021/08/18
次の様なコードでテストすると ::GonsA_Triangulation で長方形の片方が消えてしまう.

	GonsA	gnsa = ::To_GonsA(_3d_file) ;
	     	gnsa = ::GonsA_Triangulation(gnsa) ;
	::GonsA_Toix3(gnsa,(out_name+_T(".ix3")).c_str()) ;
	::GonsA_ToOBJ(gnsa,(out_name+_T(".imo")).c_str()) ;
	::GonsA_ToWRL(gnsa,(out_name+_T(".wrl")).c_str()) ;

その後いろいろとデバッガでやってみたが,その中は限定できなかった.
最適化の「実行速度」以外では,現象は発生しない.


結局 SP 6 をインストールすることに…
が,インストールできない.
VS 6 SP 6 was not completed successfully
対応方法がわからないので,仮想マシンの Win10 Pro x64 にインストールしてみるとうまくいった.
ちょっと面倒(ビルド時間がかかるなど)だが,動かないよりは良いので併用か?


2021/08/19
仮想マシンの VC 6 のデバッグ.
一度ブレークさせると,その後ステップ実行できない.

---------------------------
Microsoft Visual C++
---------------------------
Unhandled exception in GLSm.exe (OLE32.DLL): 0xC0000005: Access Violation.
---------------------------
OK   
---------------------------

VC 6 ブレーク後のステップ実行で 0xC0000005
同じタイミングでインストールした Win7 x64 環境ではうまく動作している.

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

JavaScript module Three.js

前回 Three.jsバージョンを更新 した時に気づいていたがそのままになっていたので少し調べてみた.
きっかけは,今まで r109 だったものを r131 にしようかと …
three.module.js は r83 ぐらい? example が module 対応になったのは r105 の頃か?
r105 と r106 の ./example/js/loaders/OBJLoader.js の内容は同じ.
./webgl_loader_obj_mtl.html は import 部分と THREE が異なる.JavaScript のコードとしては同じ?


次の所を参考に,いろいろと…
JavaScript モジュール
そこにある basic-modules を,import でない方法で書き直し.
main.js を html 内の body に取り込み.
最初,間違って head 内に書いたら create でエラー(document.body が null).
また,canvas.js 内に export が存在するとうまくいかず,js をコピーして,その行をコメントに.
script src=".../canvas_.js"
それを import を使用した方法に.
main.js を直接 body 内に記述したもの.
script type="module"


*.js をどちらの場合も同じものとしたいが,方法は?


2021/06/06
Three.js で,同じ OBJLoader.js を使っているのかと思ったが,違った.
example/js/OBJLoader.js と example/jsm/OBJLoader.js が存在している.


ある程度 module を使うための変更内容がわかったので,既存のデータを変更してみた.
データはいつもの.http://mish.work/i_Tools/Doc/blog/3D_Data/Cube_2021_07.htm
r109 を利用している.それを r131 に変更.
r131 に変更したもの
c_3js_10.js の先頭に次のもの追加.

import	* as THREE        	from '/_lib/js/webgl/threejs/r131/build/three.module.js';
import	{ OrbitControls } 	from '/_lib/js/webgl/threejs/r131/examples/jsm/controls/OrbitControls.js';
import	{ MTLLoader }     	from '/_lib/js/webgl/threejs/r131/examples/jsm/loaders/MTLLoader.js';
import	{ OBJLoader }     	from '/_lib/js/webgl/threejs/r131/examples/jsm/loaders/OBJLoader.js';

最後に以下を追加.

export	{	ThreeStart10	} ;
export	{	ThreeStartF 	} ;

html を type="module" と import …/c_3js_10.js に.

<script	type="module">
	import	{	ThreeStart10	}	from	"./c_3js_10.js" ;

type module , import
実行すると幾つかのエラー.

Uncaught TypeError: THREE.OrbitControls is not a constructor
    Set_orbit http://mish.work/i_Tools/Doc/blog/3D_Data/c_3js_10.js:137
    ThreeStart10 http://mish.work/i_Tools/Doc/blog/3D_Data/c_3js_10.js:47
    <anonymous> http://mish.work/i_Tools/Doc/blog/3D_Data/Cube_2021_08.htm:42

Uncaught TypeError: THREE.OrbitControls is not a constructor
OrbitControls などクラスの利用部分が違う.THREE. の部分を削除.
THREE. 部分を削除
module を使用した方法に変更
表示されている QR コードは,以前 WebGL が動作しない環境の時の区別のためのもの.
これはうまく使えないみたいなので,その部分は削除.他に “use strict”; なども削除.
module を使用


html の script の部分で type="module" が指定されていないと,

Uncaught SyntaxError: import declarations may only appear at top level of a module Cube_2021_08_E2.htm:19:3

type="module" が指定されていない時のエラー

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

コンソール AP で SetRegistryKey …

以前一度やっているが…
https://dev.mish.work/wordpress/2015/01/28/console-ap-reg-read/

class	CMy_App	:	public	CWinApp	{
public:
	void	SetRegistryKey_	(LPCTSTR key)	{	SetRegistryKey(key) ;	}
	} ;

//CWinApp	theApp ;
CMy_App		theApp ;

int	_tmain	(int argc,TCHAR* argv[])
{
	_tsetlocale(LC_ALL,_T("")) ;
	::reg_argv(argc,argv) ;
	{
		if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
			std::terr << _T("Fatal Error: MFC initialization failed") << std::endl ;
			}
		theApp.SetRegistryKey_(Profile::GetRegKey_Base()) ;	//	レジストリを使用する
		}
	if (argc > 1) {
		for (int index=1 ; index<argc ; index++) {
			tstring	fold = argv[index] ;
			::test(fold) ;
			}
		}
	else {
		tstring	def_path = LPCTSTR(::PC_get_current_page()) ;
		tstring	fold = def_path ;
		while(true)	{
			fold = ::ask_folder(fold.c_str()) ;
			if (fold.empty())	{	break ;		}
			::test(fold) ;
			}
		}
	return	0 ;
	}

CMy_App SetRegistryKey

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

QR コード生成 – 3

今まで幾つかの所でサイトのアドレスの表示に使用してきた.
QRcode Perl CGI & PHP scripts ver. 0.50
これを他で使えないかと調べていると…

  1. 引数がうまく渡せない.2 つ目以降が無視されているような感じ.
  2. 100 文字位を超えると正しく表示できない.

どうも php の呼び出し方が悪かったみたいで,…/qr_img.php に与える引数を変更.

{
	p_data	=	p_data.substr(0,106) ;
	var	last_p	=	p_data.lastIndexOf('&') ;
	if (last_p > 0) {
		p_data	=	p_data.substr(0,last_p) ;
		}
	s_data	=	p_data ;
	p_data	=	escape		(p_data) ;
	p_data	=	"?d="	+	 p_data	;
//	p_data	=	p_data	+	"&e=M"	 ;
	}

使い方は以前と同様で .js のパスを変更.
<script src ="//itl.mydns.jp/_lib/js/i_lib/2022.01/c_qr_img.js"> </script>
<script> call_qr_img_href() ; </script>

<script src ="//itl.mydns.jp/_lib/js/i_lib/2022.01/c_qr_img.js"> </script>
<script> call_qr_img_href() ; </script>

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

XSS , OS Command Injection , …

2004/05 に VBScript で作成したサイト
その後何度か修正している.2005,2006,2007,2008,2010/01,2011/07,2015/03,2020/02,2020/06 .


幾つかの対応が必要なことは見つけたが,他のチェック内容がないかと思い見つけたサイト.
XSS フィルター回避チートシート
この中で明らかに引っかかったもの.
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
表示されなくなった.
<IMG “””><SCRIPT>alert(“XSS”)</SCRIPT>”>
img script alert "XSS"


LAN 内で,過去のものもテストできる様に設定.

  1. ASP のあるフォルダ以下をコピー.
  2. Web サイトの追加.ポートはテスト用に 2015 など.ここまでで,//localhost:2015/ で表示はできる.
  3. ブラウザでエラーを表示するように設定.
  4. 32 ビットアプリケーションの有効化.
  5. LAN 内から表示できる様にする には,「Windows Definder ファイアウォール」の設定が必要.
    ファイアウォールでの設定
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

NAS の証明書の更新

先日 Synology NAS の証明書の期限が切れてしまった.
DSM に入って「コントロールパネル」-「セキュリティ」-「証明書」タブ.
対象のものを「選択」して「右クリック」-「証明書を更新」で更新できる.
「証明書を更新」
以前は「自動更新」できていたが,mish.work を取っていろいろ設定したらうまく更新できなくなったみたい.


mish.work を取ってからは,それぞれの NAS で証明書を取る様に設定した.
今までのものは Synology NAS ,mish.work は QNAP NAS ,as.mish.work は ASUSTOR NAS .
今日 QNAP NAS を見ると自動で更新できたみたい.
QNAP NAS 証明書


これらをもう少しうまくできないものかと…
mish.work の関係を Synology NAS で取得しようとするがうまくいかない.
mish.work , *.mish.work の取得
QNAP NAS ではうまくいっているみたいなので,ds.as. のみにしてみたが変わらず.
IPv6 が反映されていない関係か?


2021/07/13
うまく取得できないのでしばらく様子見.

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

Fedora 34 で GLUT が動作しない?

仮想マシンの Fedora 32 を 34 に更新.
動作を確認していると,GLUT を使用した .out がうまく動作しない.
起動はしているが,ウィンドウが表示されない?
コンパイルなどはできている.
実行するとコンソールにはウィンドウを表示する前の部分は表示される.
いろいろやったがダメで,再起動.
Fedora 34 GLUT
うまく表示する様になった.

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

::GetDiskFreeSpaceEx , ::statvfs

Win9x が多く存在していた頃のコードの MFC を使用しない方法での書き直し.
前のものは次の様になっている.

//	J048221	SDK32:GetDiskFreeSpace と GetDiskFreeSpaceEx について
typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER,PULARGE_INTEGER, PULARGE_INTEGER);
// ..
	fResult = ::GetDiskFreeSpace(pszDrive,&SectorsPerCluster,&BytesPerSector,&FreeClusters,&TotalClusters) ;
	if (fResult) {
		TotalBytes    	= (__int64)TotalClusters * SectorsPerCluster * BytesPerSector ;
		TotalFreeBytes	= (__int64)FreeClusters  * SectorsPerCluster * BytesPerSector ;
		FreeBytesAvailable = TotalFreeBytes ;
		}
// ..
{
	P_GDFSE	pGetDiskFreeSpaceEx = NULL;
	#ifdef UNICODE
		pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExW") ;
	#else
		pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExA") ;
	#endif
	if (pGetDiskFreeSpaceEx) {
		fResult = pGetDiskFreeSpaceEx (pszDrive,
			(PULARGE_INTEGER)&FreeBytesAvailable,
			(PULARGE_INTEGER)&TotalBytes,
			(PULARGE_INTEGER)&TotalFreeBytes);
		}
	}

J048221 SDK32:GetDiskFreeSpace と GetDiskFreeSpaceEx について
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/231497


Windows 環境では次の様な感じ?

class	DiskFree	{
public:
	DiskFree ()	{	Free = Total = 0 ;	}
public:
	u_64	Free ;
	u_64	Total ;
	} ;

DiskFree	GetDiskFree	(LPCTSTR path)
{
	DiskFree	df ;
	u_64		freeC = 0 ;
	u_64		free  = 0 ;
	u_64		total = 0 ;
	if (::GetDiskFreeSpaceEx(path,(PULARGE_INTEGER)&freeC,(PULARGE_INTEGER)&total,(PULARGE_INTEGER)&free)) {
		df.Free = free ;
		df.Total= total;
		}
	return	df ;
	}

Linux 環境では ::statvfs が使えるみたいで,次の様なコードで取得してデバッガで確認.

#include    <iostream>
#include    <sys/statvfs.h>

int main()
{
	struct statvfs	vfs = { 0 } ;
	::statvfs(".", &vfs) ;
	return 0 ;
	}
vfs     	{...}           	statvfs
  f_bsize 	4096            	unsigned long
  f_frsize	4096            	unsigned long
  f_blocks	1452408524      	__fsblkcnt_t
  f_bfree 	200259802       	__fsblkcnt_t
  f_bavail	199469255       	__fsblkcnt_t
  f_files 	183001088       	__fsfilcnt_t
  f_ffree 	181248356       	__fsfilcnt_t
  f_favail	181248356       	__fsfilcnt_t
  f_fsid  	3941329918106335254	unsigned long
  f_flag  	4096            	unsigned long
  f_namemax	255             	unsigned long
  __f_spare	                 	int [6]
    [0]   	0               	int
    [1]   	0               	int
    [2]   	0               	int
    [3]   	0               	int
    [4]   	0               	int
    [5]   	0               	int

Debian10 ::statvfs

Iwao@AS5202T:/volume1/home/Iwao $ cd gcc_test/Test/t_linux/T_vfs/T_s_vfs/
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ ll
total 12
drwxrwxrwx    2 Iwao     users       4.0K Jul  1 22:01 ./
drwxrwxrwx    4 Iwao     users       4.0K Jul  1 22:00 ../
-rwxrwxrwx    1 Iwao     users        581 Jul  1 21:55 T_s_vfs.cpp*
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ cat T_s_vfs.cpp
#include    <iostream>
#include    <clocale>

#include    <sys/statvfs.h>

#include    "_tdefine.hxx"
#include    "t_tstrng.hxx"

int     _tmain  (int argc,TCHAR* argv[])
{
        _tsetlocale(LC_ALL,_T("")) ;
        {
                struct  statvfs vfs = { 0 } ;
                if (::statvfs(".", &vfs) == 0) {
                        u_64    free = vfs.f_bavail * vfs.f_frsize ;
                        u_64    total= vfs.f_blocks * vfs.f_frsize ;
                        std::tout << ::To_tstring_Ki(free) << _T(" / ") << ::To_tstring_Ki(total) << std::endl ;
                        std::tout << ::To_tstring_cs(free) << _T(" / ") << ::To_tstring_cs(total) << std::endl ;
                        }
                }
        return  0 ;
        }
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ g++ T_s_vfs.cpp -Wall
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ ./a.out
760.90 G /   5.41 T
817,005,420,544 / 5,949,065,314,304
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $

AS5202T  ::statvfs
diskfree.hxx

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

NAS lxcdebian10 と VC 2019

ASUSTOR NAS 上の Debian と VC 2019 を使用してのビルドとデバッグ.
VC で次の様なエラーになっている.

lxcdebian10 にツールがありません: gdb rsync zip

lxcdebian10 にツールがありません: gdb rsync zip
次の所にある様に必要なものをインストール.
Linux development with C++ in Visual Studio
gdb rsync zip のインストール
丁度 1 年前にやっていた みたいで,その時より 安定したか?

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

C2535 , C2382

今まで特に問題なくビルドできていたプロジェクト.今月に入ってからは VC 2015 まででビルドしていた.

VC 2017
------ ビルド開始: プロジェクト: i3DV, 構成: 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 をご覧ください。
ComGui03.cpp
OpGL.hxx                    Support
Dbg.hxx Auto server      No Support
c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.16.27023\include\comip.h(152): error C2535: '_com_ptr_t<_IIID>::_com_ptr_t(int)': メンバー関数は、既に定義または宣言されています。
c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.16.27023\include\comip.h(141): note: '_com_ptr_t<_IIID>::_com_ptr_t' の宣言を確認してください
c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.16.27023\include\comip.h(938): note: コンパイル対象の クラス テンプレート インスタンス化 '_com_ptr_t<_IIID>' のリファレンスを確認してください
プロジェクト "i3DV141.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
VC 2019
ビルドを開始しました...
------ ビルド開始: プロジェクト: i3DV, 構成: Debug Win32 ------
ComGui03.cpp
OpGL.hxx                    Support
Dbg.hxx Auto server      No Support
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(115,5): error C2382: '_com_ptr_t<_IIID>::_com_ptr_t': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(113): message : '_com_ptr_t<_IIID>::_com_ptr_t' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(1096): message : コンパイル対象の クラス テンプレート インスタンス化 '_com_ptr_t<_IIID>' のリファレンスを確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(381,10): error C2382: '_com_ptr_t<_IIID>::operator ==': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(371): message : '_com_ptr_t<_IIID>::operator ==' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(446,10): error C2382: '_com_ptr_t<_IIID>::operator !=': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(436): message : '_com_ptr_t<_IIID>::operator !=' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(511,10): error C2382: '_com_ptr_t<_IIID>::operator <': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(501): message : '_com_ptr_t<_IIID>::operator <' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(577,10): error C2382: '_com_ptr_t<_IIID>::operator >': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(566): message : '_com_ptr_t<_IIID>::operator >' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(643,10): error C2382: '_com_ptr_t<_IIID>::operator <=': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(633): message : '_com_ptr_t<_IIID>::operator <=' の宣言を確認してください
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(709,10): error C2382: '_com_ptr_t<_IIID>::operator >=': 再定義 ; 異なる例外指定です。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\comip.h(699): message : '_com_ptr_t<_IIID>::operator >=' の宣言を確認してください
プロジェクト "i3DV142.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

Win10 を 1909 から 20H2 に上げたのと,VS 2019 のアップデートがあった.
検索 をかけても,これといった情報には引っかからない.
となると,最近変更したコード?
nullptr を定義したことを思い出した.
#define nullptr NULL
VC 2015 以降では定義されない様に変更.
うまくいった.


nullptr は VC10 以降で使えるみたいで _MSC_VER < 1600 に変更.
https://ja.wikipedia.org/wiki/Microsoft_Visual_C++

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

C2664

スタックを使用した次の様なコード.

	stack_s	so ;

エラー情報を指定する様に変更してビルド.

	i_error	ie ;
	stack_s	so(&ie) ;
--------------------Configuration: t_stack - Win32 Debug--------------------
Compiling...
t_stack.cpp
d:\document\vs\vs\1998\t_stack\t_stack\t_stack.cpp(14) : error C2664: '__thiscall stack_s::stack_s(const class stack_s &)' : cannot convert parameter 1 from 'class i_error *' to 'const class stack_s &'
        Reason: cannot convert from 'class i_error *' to 'const class stack_s'
        No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.

T_stack.exe - 1 error(s), 0 warning(s)

C2664 になってしまう.

class	stack_b	{
public:
		stack_b		(i_error* i_err=NULL)	{	ie = &tmp_ie ;	if(i_err != NULL) {	ie = i_err ;	}	}
protected:
	i_error		tmp_ie ;
	i_error*	ie ;
	} ;

class	stack_s	:	public	stack_b	{
public:
//		stack_s		(i_error* i_err=NULL)	:	stack_b	(i_err)		{	;	}
public:
	virtual	bool	push	(c_tstring& s) ;
	virtual	tstring	pop 	(void) ;
	virtual	tstring	last	(void) ;
protected:
	s_tstring	stck_s ;
	} ;

コメントにしている stack_s のコンストラクタを追加すれば OK .
C2664  stack
独習 C++ 7.3 223 ページ

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