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

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

2025年4月
 12345
6789101112
13141516171819
20212223242526
27282930  

カテゴリー

アーカイブ

ブログ統計情報

  • 111,745 アクセス


Shell Extension のデバッグ

Shell Extension で,縮小版の背景に GDI+ を使用して,どうも動作が安定しなくなった.
現象としては,環境によるが explorer.exe が「応答なし」に.
  GDI+ の GdiplusShutdown の呼び方が悪かったみたいで,DllCanUnloadNow で終わらせる様にした.
また,今回デバッグ用にダンプする様にしていて,そのファイルをエクスプローラで選択しようとするとフリーズ.
  これは,デフォルトでは出力しないことで回避.


今回これらをやっていて,以前から面倒と思っていた ShellExt.dll のデバッグ.
デバッグ版.dll が呼ばれる様に設定して,普通の exe で「開く」ダイアログで dll 内をデバッグできる.


Vector
https://jml.mish.work/i-tools.html

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

VC include lib のパス

VC 6
  HKCU\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories
VC 7 , 7.1 , 8 , 9
  C:\Users\Iwao\AppData\Local\Microsoft\VisualStudio\…\VCComponents.dat
VC 10 , 11 , 12
  C:\Users\Iwao\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp. … .user.props

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

フォルダ以下の同期

先日追加した WD Cloud にソースなどをバックアップしたいと思い探していたら,robocopy.exe を見つけた.
まだ,単純にバックアップをとっているだけ.
  robocopy \\DevXP\C_Drive\Temp\ \\WDCloud\Backup\Develop\DevXP\Temp\ /mir
UNICODE のフォルダやファイル名も,コピー中の表示は ‘?’ となるが問題なさそう.


GUI 版の RichCopy があるみたいだが,こっちはまだ未確認.
FTP もいける?


robocopy 補助ツール
robocopy 補助ツール

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

Win 8.1 –> Win 10 ?

勝手に Win 8 から 8.1 に更新された仮想マシン.

VirtualBox が 4.3.30 だったので,5.0.8 に.
しかし,変わらず.
Win10_Japanese_x32.iso」を使用してインストールしてみた.
* すぐ上の Win 10 ダウンロードのリンク先は,利用 OS ? により異なる様です.この記事は mac を想定しています.


何とか環境を引継ぎインストールできたみたい.

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

うまく起動しない…

「知人から譲り受けた Win 7 のノート PC の起動が遅い」と言うことで調べてみると,
確かに,起動時のロゴが出て HDD のランプが点きっぱなし,1 時間程そのままにしておいたら起動していた.
怪しいのは HDD .
イベントビューアで確認しようとしたが,起動はするがデータが開けない.
ChkDsk で修復すると,

起動は通常の時間になったと思うが,動作が安定しない.


リカバリメディアの作成
  PCG-71712N で実際必要だったメディア数は DVD で 5 枚,DL で 2 枚となっていた.
  VPCCB38FJ が正しいモデル名?
ずっと PC についてはいなかったが,それぞれ 20 ~ 30 分程度.
  4 枚目が少しかかっていたように思う.HDD の不良セクタの影響?


先ず,リカバリ領域からのリカバリ.2 時間程度.
ちょっと拝借,AP をインストールして今日ビルドした exe をテスト.


今度はリカバリメディアの DVD から
  読込?に 1 時間程度(ディスク 5 枚).
  さらに 2 時間弱.


Window Update で,170 個程を 6 時間位.

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

~iwao.n にアップしたものが動かない

//DevXP/Test/T_bxSldr/ を ~iwao.n/T_bxSldr にアップしたら動かない.
js の参照の関係とは思っていたが,少し時間がかかったのでメモ.
js を参照している部分のファイル名に大文字が混在していた.

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

WD Cloud を使ってみて…

いろいろなサイズのファイルのバックアップを取っていて,
VHD など大きなファイルのコピーで,ローカルの外付け HDD (USB 2 接続)より速そう.
それで簡単に計測してみた.
3 GB のファイルをコピー.
C , D は内蔵 HD .H は USB 2 接続.S は WSS .W は WD Cloud .

  MB/s
C->C 583 5
C->D 573 5
C->H 384 8
C->S 381 8
C->W 389 8
H->C 161 19
H->D 111 29
H->S 109 29
H->W 110 29
S->D 46 70
S->H 133 30
W->D 60 55
W->H 134 30

動作を見ていると,内蔵 HDD からの読込で最初のうちは速いがある所を過ぎると 5 MB/s 程度に落ちてしまう.
NAS から内蔵 HDD の時も同様.ファイルサイズが 500 MB 程度なら速いと思う.
上と同じ条件のすべてでは計測はしてないが,10 秒以内.


2015/10/29
ソースなどをバックアップしていて,
  時々,コピーが完了する前に何もなかったかの様に終わってしまう.
  プロジェクトのバックアップの時は,1 プロジェクトだけコピーして終わっていた.
  熱のせい?少し間を置くとコピーできる.すぐだと操作を間違えたかの様.

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

WD Cloud 追加

スマートフォンと PC のバックアップに使えそうだったので購入.


ユーザーマニュアルを見ながら進めていて,
セットアップアシスタントでの設定の最後の方でエラー?に.
メールアドレスの入力で何か間違えたみたい?
もう一度やり直そうとしても,「このドライブは既にセットアップ済みです」となる.
そのすぐ下のリンクをクリックしてもパスワードが入らず進められない.
結局は,「デバイスの設定に移動」で //wdcloud にアクセスする様になるが,この時のパスワードが違っていた.
「ユーザー」はいつものでパスワードもいつものを入れたつもりが,うまく登録されていなくて空の状態だった.
「ファイルに移動」の方は,上にも書いたが設定されてなかった.
ここでの入力は,メールアドレスとパスワードで,Web 経由の WD Cloud へのアクセスになるみたい.
最初から wdcloud にアクセスする方がわかりやすい様に感じた.


107SH と iPod touch に「WD Cloud モバイルアプリ」をインストール.
Android 版では思った様にバックアップできたが,iOS 版ではバックアップがうまくされてない.

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

Win 10 IE , Edge

Win 10 の IE や Edge からの User agent を調べていて,
Edge は “Edge/12.10240” が後ろの方にあるのでこれで判断できる.
  他に AppleWebKit Chrome Safari などが前にあるので,Edge と限定するためにはコードの変更(判断順の変更)が必要.
IE では “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Trident/8.0; .NET4.0C; .NET4.0E)” となっている.
  イントラネット環境で IE 11 とするには,「互換表示設定」の変更が必要.
  
  Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko
MSDN ユーザー エージェント文字列の変更


Win 10 での デスクトップ AP の実行で,
  ドロップダウン付のツールバーの表示がおかしくなる現象は,まだ残っているみたい.
  ただ,以前の様に簡単には現象を再現できない.

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

タスクトレイのチップが 64 …

XP 環境で,タスクトレイのチップが 64 文字で切れてしまっている.
VC8.exe は 64 で切られることはないが,VC 9 以降だとうまくない?
Win 7 環境での動作は問題ない.
まだ詳しく調べられてないが,とりあえずメモ.


2015/09/08
どうも _WIN32_WINNT によるみたい.

  Win UNICODE MBCS NOTIFYICONDATA
VC 6 400 152 88 szTip[64]
VC 7 501 936 488 dwInfoFlag
VC 8 502 936 488  
VC 9 600 956 508 hBallonIcon
VC10 601 956 508  
VC11 601 956 508  
VC12 601 956    

  Win は _WIN32_WINNT .
cbSize を NOTYFYICONDATA_V3_SIZE と指定すれば良いのか?
今回は,意図せず 64 文字で切れていたことを避けたかっただけなので,次の様に変更.
   NOTIFYICONDATA nid ; ::ZeroMemory(&nid,sizeof(NOTIFYICONDATA)) ;
   long maxLenTip = countof(nid.szTip)-1 ;
   #if (_MSC_VER >= 1500) // VC 9 ~
     if (::GetWindowsVersion() < 6) {
       maxLenTip = 64-1 ;
       }
   #endif
   if (::GetWindowsVersion() > maxLenTip) {
     …
     }

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

NotifyIcon クラスの使用

NotifyI.hxx


ダイアログまたは相当のクラスのヘッダに,NotifyIcon の変数を確保.
タスクトレイにアイコンを表示したい時は,NotifyIcon::Add または Mod を呼出す.
タスクトレイのアイコンを消したい時は,NotifyIcon::Del .


アニメーションの場合,NotifyIcon::StartAnimate とタイマで NotifyIcon::AnimateIcon .
アニメーションアイコンの登録は,NotifyIcon::AddIconA .登録されてない場合は,exe のアイコンと表示なしのトグル.
CAppDlg::OnInitDailog で StartAnimate ,CAppDlg::OnTimer で AnimateIcon だけで,exe アイコンが点滅する.


チップの設定は,NotifyIcon::SetTip .


最小化されたときに表示
  void CXxxxDlg::OnSize(UINT nType, int cx, int cy)
  {
    CDialog::OnSize(nType, cx, cy);
    ::FitWindow(this,&m_Image,0) ;
    if (nType == SIZE_MINIMIZED) {
      ShowWindow(SW_HIDE) ;
      NotifyI.Mod() ;
      }
    }


ヘッダとソースへの MESSAGE MAP の追加
  afx_msg LRESULT OnTrayCallback (WPARAM wParam,LPARAM lParam);
  ON_MESSAGE (WM_TRAY_CALLBACK, OnTrayCallback)
マウスのクリックによる動作
  LRESULT CXxxxDlg::OnTrayCallback (WPARAM wParam,LPARAM lParam)
  {
    UINT uID = (UINT)wParam;
    UINT uMouseMsg = (UINT)lParam;
    if (uMouseMsg == WM_LBUTTONDOWN) {
      AfxGetMainWnd()->ShowWindow(SW_SHOW) ;
      AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL) ;
      }
    if (uMouseMsg == WM_RBUTTONUP) {
      CPoint curPos ; ::GetCursorPos(&curPos) ;
      PopupMenu (NULL,IDR_POP_MENU,curPos,ID_XXXX) ;
      }
    return 0 ;
    }
WM_TRAY_CALLBACK は,NotifyI.hxx に定義済.


2015/09/03
メニュー表示後,デスクトップなどのクリックでメニューが消えなかったので検索すると,
SetForegroundWindow呼べば良いとのこと
    if (uMouseMsg == WM_RBUTTONUP) {
      CPoint curPos ; ::GetCursorPos(&curPos) ;
      SetForegroundWindow() ;
      PopupMenu (NULL,IDR_POP_MENU,curPos,ID_XXXX) ;
      }

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

Matrix クラスバグ

20 年位前に作成したコードのため,こんなガードが,…


行列の領域を作成する時に
   if ((long)r*(long)c*sizeof(double) > 1000000L) {
     return ;
     }
16 ビットの場合は 64000L .


ここのバナナのデータを開いた時,法線が正しく生成されず真っ黒になってしまった.

法線ベクトルのデータ数が 32068 で,1 MB を超えていた.
ガードを100 MB に変更.

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

メモリのオーバーフロー

次の様なコードで,実行時にエラー.
  i_DIB DIB_FlipVertical (const i_DIB& dib_)
  {
     i_DIB dib = dib_ ;
     if (dib_.GetWidth () == 0) { return dib ; }
     if (dib_.GetHeight() == 0) { return dib ; }
     u_32* bits = (u_32*)dib.GetP_Bits() ;
     for ( int y=0 ; y<dib.GetHeight()/2 ; y++) {
       for (int x=0 ; x<dib.GetWidth() ; x++) {
         u_32 sPos = x+dib.GetWidth()*( y) ;
         u_32 dPos = x+dib.GetWidth()*(dib.GetHeight()- y) ;
         u_32 tmp = *(bits+(dPos)) ;
         *(bits+(dPos)) = *(bits+(sPos)) ;
         *(bits+(sPos)) = tmp ;
         }
       }
     return dib ;
     }
原因は最初の dPos が画像の範囲を超えていること.これはすぐにわかったが,
デバッガで追いかけてもこのループは何もなかったかの様に通り,この関数を抜ける時にエラーとなる.
たまたまと言うこともあると思うが,MFC の配列を使用していればアクセスした段階で ASSERT されるのでは?
i_dib_f.hxx

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

error LNK2005 LNK2001

プロジェクト生成時に「MFC を使用しない」としたコンソール AP で Afx.h をインクルードした場合


リンク中…
nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) はすでに LIBCD.lib(new.obj) で定義されています
nafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) はすでに LIBCD.lib(dbgdel.obj) で定義されています

nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル “__endthreadex” は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル “__beginthreadex” は未解決です


プロジェクトの設定で「共有 DLL で MFC を使う」などに変更.

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

ファイル数

あるフォルダに,ユーザが作成した 3D データを,自動でファイル名を振って保存する様にしている.
但しファイル名の一部はユーザ指定.
ロジック上は,36^4 で 1,679,616 管理できるはず.
これがいっぱいになったと言われて…
  通常の運用であれば,1 日に 100 個はかなりきつい.
  それでも 16,000 日かかる.
そんなことがあり,ファイル名の空きを検出するツールを作成中.


かなり前の事だが,iRMX の FD のフォーマット?で,指定しないと 200 個位がデフォルトだったと記憶している.
NTFS ではその様なことはないと思ってたが,はっきりした情報があったのでメモ.
TechNet – ファイル システム

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

クリップボードに…

オフスクリーンにレンダリングしたものをクリップボードにコピーしていて,
  5000x5000x4 バイトの CF_BITMAP がうまく動作しない.
原因は Office クリップボードの制限みたいで 8 M まで.
  Office クリップボードにアイテムを追加できない場合の確認事項
無効にして対応.


よくわからないが,以下の様にした.
  CF_METAFILEPICT StretchDIBits
  CF_BITMAP     AlphaBlend
AlphaBlend function (Windows) – TechNet – Microsoft に,
  An error occurs (…) if the source device context identifies an enhanced metafile device context.
コピー画像は,


いろいろやっていて,一度 EMF に吐いて
 ::GetEnhMetaFile(…) で返される HENHMETAFILE を CF_ENHMETAFILE で意図した動作となった.
  {
    CString tmpPath = ::GetTempPath() ;
    tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + _T(“Debug.tmp”) ;
    tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + ::GetFileTitle(::GetModuleFileName()) ;
    CString nowStr = CTime::GetCurrentTime().Format(_T(“%d%H%M%S”)) ;
    CString tmpName = CString(::Path_AddLastSP(tmpPath).c_str()) + nowStr + _T(“.emf”) ;
    ::CreateFolder(tmpPath) ;
    ::ToEMF(dib,tmpName) ;
    HENHMETAFILE hMetaFile = ::GetEnhMetaFile(tmpName) ;
    return hMetaFile ;
    }
    …
   ::SetClipboardData(CF_ENHMETAFILE, hGMemEnhM) ;
i_DIB_x.hxx
i_DIB_Fn.hxx
i_dib.hxx


今度はメモリメタファイル(第 2 引数を NULL)にして,
  {
    CMetaFileDC mf_DC ;
    BOOL ret = mf_DC.CreateEnhanced(NULL,NULL,NULL,NULL) ;
    ::AlphaBlend (mf_DC.GetSafeHdc(),dRect,dib) ;
    HENHMETAFILE hEnhMetaF = mf_DC.CloseEnhanced() ;
    return hEnhMetaF ;
    }
  CreateEnhanced の幾つかの引数が NULL は知らなかった.
  CreateEnhMetaFile
  Programming Windows 5 18.2.2
  Programming Windows 5


XP 環境のクリップブックや,Word 2003 などでの CF_METAFILEPICT がうまくない.

  {
    CMetaFileDC mf_DC ;
    BOOL ret = mf_DC.Create() ;
    ::StretchDIBits (mf_DC.GetSafeHdc(),dRect,dib) ;
    HMETAFILE hMetaFile = mf_DC.Close() ;
    hGMemMeta = ::GlobalAlloc( GHND, (DWORD) sizeof(METAFILEPICT)) ;
    {
      LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)GlobalLock(hGMemMeta) ;
      lpMFP->mm = MM_TEXT ;
      lpMFP->xExt = dRect.right ;
      lpMFP->yExt = dRect.bottom ;
      lpMFP->hMF = hMetaFile ;
      }
    ::GlobalUnlock(hGMemMeta) ;
    return hGMemMeta ;
    }
StretchDIBits とした.


i_ToDIB

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

Win 10 TP 10061

Build 10061 に更新.
VirtualBox だからなのかわからないが,OpenGL を利用している exe で真っ黒になってしまう.
Vista になった時,一部の環境やオフスクリーンの場合に同様の現象だったと記憶している.
DescribePixelFormat , SetPixelFormat 辺り?
Build 9926 では問題なかったと思う(9879 では問題ない).
exe によっては起動しなかったり,アプリケーションエラーになる.
他に,どこかの設定かわからないが,エクスプローラから AP にドキュメントのドロップが出来ない?


2015/06/03
Build 10130 で,OpenGL での描画が真っ黒になる動作は解消されている.

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

オフスクリーンのレンダリングで…

オフスクリーンのレンダリングで,環境により,真っ黒や意図しない色になってしまう現象があった.
オフスクリーン レンダリング
ウィンドウが最小化された後にその様になってしまうみたい.
描画対象のウィンドウを与えていてそれが空になっているのがうまくない.
::SetPixelFormat や ::MakeCurrent でエラーになっている.
IsRectEmpty() の時,描画部分を実行しない様に変更.

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

vsdrfCOM でエラー

VS 2005 のセットアッププロジェクトで,exe の「Register」を「vsdrfCOM」としてビルドすると,
—————————
AsTM0317.exe – アプリケーション エラー
—————————
“0x5cac9a9c” の命令が “0x0000005c” のメモリを参照しました。メモリが “read” になることはできませんでした。
プログラムを終了するには [OK] をクリックしてください
—————————
OK
—————————
 0x0000005c のメモリを参照しました
—— ビルド開始: プロジェクト: TestSet3, 構成: Debug ——
ファイル ‘C:\…\TestSet3\TestSet3\Debug\TestSet3.msi’ をビルドしています…
警告: ‘AsTM0317.exe’ というファイルのレジストリ情報を作成できません
警告: Windows インストーラは、どの選択された必須コンポーネントにも含まれていません。
ファイル ‘AsTM0317.exe’ をパッケージしています…
ファイル ‘AsImgCnv.exe’ をパッケージしています…
========== ビルド: 1 正常終了または最新の状態、0 失敗、0 スキップ ==========


AsImgCnv.exe の方はエラーの表示はない.
VS 2002 や 2008 では,OK.
また,vsdrfCOMSelfReg の場合も OK.


2015/03/20
vsdrfCOMSelfReg とした場合,そのままではインストール時にダイアログから表示されていた.
/RegServer , /UnRegServer が指定された場合,ダイアログを表示しない様に対応.
   BOOL isReg = FALSE ;
   {
     if (::FindNoCase(m_lpCmdLine,_T( “/REGSERVER”)) >= 0) { isReg = TRUE ; }
     else if (::FindNoCase(m_lpCmdLine,_T( “-REGSERVER”)) >= 0) { isReg = TRUE ; }
     else if (::FindNoCase(m_lpCmdLine,_T(“/UNREGSERVER”)) >= 0) { isReg = TRUE ; }
     else if (::FindNoCase(m_lpCmdLine,_T(“-UNREGSERVER”)) >= 0) { isReg = TRUE ; }
     }
   if (!isReg) {
     CAsImgCnvDlg dlg;
     m_pMainWnd = &dlg;
     int nResponse = dlg.DoModal();
     if (nResponse == IDOK) {
       }
     else if (nResponse == IDCANCEL) {
       }
     }

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

tstring Unit::ToName の呼び出し後エラー

もともと CString Unit::ToName(…) だった関数の戻り値を tstring に変更した.
利用している所の多くは,コンパイルエラーとなり Unit::ToName(…).c_str() と修正したが...
次の様な可変引数の修正が漏れていた.
CString unitStr ; unitStr.Format(_T(“%d_%s”),…,Unit::ToName(…)) ;

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