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

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

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

カテゴリー

アーカイブ

ブログ統計情報

  • 116,170 アクセス


VC 6 Release inline

次の様な呼出しで,Release ビルドでうまく動作しないことがあった.
…\PntFnc\TCrossL\TCrossLD.cpp 2 円の交点のエラー時の動作
  Vd2 cp1 = ::get_point_on_line (l1c,l2c,l1r) ;
デバッグ版では意図した動作となる.
inline Vd2 get_point_on_line ( const Vd2& ls, const Vd2& le, const double d )
{
   if (ls == le) { return ls ; }
   Vd2 unit = (le-ls).Normalized() ;
   Vd2 pos = ls + unit * d ;
   return pos ;
   }
ls と le を比較している部分で抜けてしまっている?
VC 7 では OK.


よくわからないので,間接的に呼出す様に変更.
inline Vd2 get_point_on_line(const Vd2& ls,const Vd2& le,const double d) { return get_point_on_line_(ls,le,d); }

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

内積で誤差?

以前書いたコードで次の様にしていた.

デバッグ版では単位ベクトルにすると誤差が大きい様に感じたが,リリース版ではそれ程でもない?


double	Naiseki	(const P3& p1,const P3& p2)
{
  //	→ →  →  →
  //	a・b=|a||b|cosθ
  //	a.x*b.x+a.y*b.y+a.z*b.z=sqrt(ax*ax+ay*ay+az*az)*sqrt(bx*bx+by*by+bz*bz)*cosθ
  //	...	a,bのベクトルが単位ベクトルの時
  //		sqrt(ax...) と sqrt(bx...) は 1
  //	a.x*b.x+a.y*b.y+a.z*b.z=1*1*cosθ
  //	a.x*b.x+a.y*b.y+a.z*b.z=cosθ
  //	→ →
  //	a・b=ax*bx+ay*by+az*bz
  P3	p1u = p1.Uni() ;
  P3	p2u = p2.Uni() ;
  //	return	(p1u.x*p2u.x+p1u.y*p2u.y+p1u.z*p2u.z) ;
  //	誤差の補正
  double	dp = p1u.x*p2u.x+p1u.y*p2u.y+p1u.z*p2u.z ;
  if (dp<-1 || 1<dp) {
    if (dp < -1.)	{	dp = -1. ;	}
    if (dp >  1.)	{	dp =  1. ;	}
    }
  return	dp ;
  }
 
P3	Gaiseki	(const P3& p1,const P3& p2)
{
  //	→ →  →  →
  //	a×b=|a||b|sinθ・c
  //	→ →
  //	a×b=(ay*bz-az*by,az*bx-ax*bz,ax*by-ay*bx)
  P3	pt ;
  pt.x = p1.y * p2.z - p1.z * p2.y ;
  pt.y = p1.z * p2.x - p1.x * p2.z ;
  pt.z = p1.x * p2.y - p1.y * p2.x ;
  return	pt ;
  }
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

WD Cloud に Joomla

WD Cloud に Joomla を追加しようとして,データベースの設定でつまずいていた.
ユーザ名がわからず,検索していたら phpMyAdmin を設定すればよさそうとわかった(pdf の 150 ページ辺り).

これで,ユーザ名に admin を指定して設定できた.

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

Win 10 10586

ドロップダウン付のツールバーで,ボタンが切れる現象は直った?
VS 2005 で作成した「Web セットアップ プロジェクト」のインストールはまだできない?


2015/12/10
ドロップダウン付のツールバーのサイズが正しくない現象が XP でも発生.
初期の Win 10 で現象が発生しやすかったことは確かだが,もっと他にも条件がありそう.
  MFC 8 やフラットかどうかなど.
XP で発生した時,MFC 6 の exe は問題なかった.
いつも使用している環境では,フラットにしていないことが多い.

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

vector -> tstring

以前 MFC を使用した StringArrayToString を変更したが,今回は STL 版.


tstring String_Join (const std::vector<tstring>& srcAry,LPCTSTR sp)
{
  tstring str ;
  for (size_t index= 0 ; index<srcAry.size() ; index++) {
    str += srcAry[index] ;
    if (index+1 == srcAry.size()) { continue ; }
    str += sp ;
    }
  return str ;
  }
MFC 版は VC 6 までだったが,STL 版では VC 7 も遅い.


tstring String_Join (const std::vector<tstring>& srcAry,LPCTSTR sp)
{
  tstring str ;
  v_tstring tmpSA ;
  tstring tmpStr ;
  for (size_t index= 0 ; index<srcAry.size() ; index++) {
    tmpStr += srcAry[index] ;
    if (index+1 == srcAry.size()) { continue ; }
    if ((index%128) == 100) {
      tmpSA.push_back(tmpStr) ;
      tmpStr.erase() ;
      continue ;
      }
    tmpStr += sp ;
    }
  if (!tmpStr.empty()) {
    tmpSA.push_back(tmpStr) ;
    }
  if (tmpSA.size() > 1) {
    str = ::String_Join(tmpSA,sp) ;
    }
  else if (tmpSA.size() == 1) {
    str = tmpSA[0] ;
    }
  return str ;
  }

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

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.