時刻の同期
6/20 に HDL-Z2WM2C2 を追加した.
ソースファイルの保管のサーバとしての利用で,Win7 USB 2 HDD と比べても遜色ない.
ひとつ気になることが,思っていたよりファンの音がうるさい.
先日,クライアントの PC と WSS で,時間が少しずれていたので time.windows.com で時刻を合わせた.
今日時刻を見てみると 10 秒位の差ができてしまっている.
もう少し精度が欲しかったので検索すると,
インターネット時刻機能のポーリング間隔を調整する方法
Windowsの時計がずれる / 自動で正確に合わせる小技 (Windows 7/8.1編)
これらを参考にさせてもらって,1 日に 1 回程度の設定とした.
Polymorphism
class iDocCSV1 : public iDocText {
…
virtual long GetFieldNo (c_tstring& fieldName) const { return FNoNOP ; }
…
} ;
c_tstring fieldName となっていた.
TextureTo_1::MakeCSV1 でタプルクォーテーションでうまく括られない.閉じる ‘\”‘ が付加されない.
da.push_back(::QuotM_Add_Auto( GetPath () ) ;
原因はよくわかってないが,LPCTSTR 版を利用することで対応.
da.push_back(::QuotM_Add_Auto( GetPath ().c_str()) ) ;
MakeCSV1 を切り出してコンソール AP としてテストしたが,期待した動作となり原因は掴めてない.
2014/06/25
また次の様なコードで,STL 版ではうまく動作していない.
{
tstring str ;
str += tt1->GetName() + _T(“\r\n”) ;
str += tt1->GetPath() + _T(“\r\n”) ;
str += tt1->GetPathPNG()+ _T(“\r\n”) ;
str += tt1->GetPathTGA()+ _T(“\r\n”) ;
m_TexPath1 = str.c_str() ;
}
MFC 版では OK .
{
CString str ;
str += tt1->GetName ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPath ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPathPNG ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPathTGA ().c_str() + CString(_T(“\r\n”)) ;
m_TexPath1 = str ;
}
2014/06/27
また,::String_Join_Line でうまく結合されなかった.
デバッガで調べると,サイズは確保されいる.メモリの内容をよーく見てみると,途中に ” が入っている.
原因は,MFC を利用しない方法で書き直した ::DropFilesTo のバグ.
ファイル名の最後に余分な ‘\0’ が付加されていた.
VC 6 MFC サポートのコンソール AP で,C4786
c:\program files\microsoft visual studio\vc98\include\utility(123) :
warning C4786: ‘std::vector<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > >’ :
デバッグ情報で識別子が 255 文字に切り捨てられました。
StdAfx.h の #include <iostream> より前に,以下を追加して対応.
#pragma warning (disable : 4786 ) #include <utility> // #pragma warning (default : 4786 )
MFC DLL → Static – 2
VC 6 などで生成したプロジェクトを,VC 7 ~ VC 11 まで順に変換して利用してきたもの.
「共有 DLL で MFC を使う」から「スタティック ライブラリで MFC を使用する」に変更してビルドすると,
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(24):
fatal error C1189: #error : Building MFC application with /MD[d]
(CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
プロジェクトの「プロパティページ」-「構成プロパティ」-「C/C++」-「コード生成」-「ランタイム ライブラリ」を
「マルチスレッド DLL (/MD)」から「マルチスレッド (/MT)」に変更.
ビルドは通る様になったが,起動時メインフレーム表示直後にアプリケーションエラー.
プロジェクトのプロパティで,「リンカ」-「デバッグ」-「デバッグ情報の生成」で「はい (/DEBUG)」に.
ビルドして実行すると,
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfc\docsingl.cpp
CSingleDocTemplate::SetDefaultTitle(CDocument* pDocument) の
ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED));
プロジェクトのプロパティ,「リソース」-「プリプロセッサの定義」に “_AFXDLL;” があったので削除.
2021/02/17
VC 7 以降に変換した段階で,ソースの「プリプロセッサの定義」が引き継がれてしまう?
そのため,それは削除した方が良さそう.
* 間違ってプロジェクトの「プリプロセッサの定義」を削除しないこと.
VC 12 LNK1104 , VC 14.2 LNK2019
NICONI SOLID
ニコニ立体で表示可能な OBJ のメモ
データは 100x100x100 の立方体.Cube_obj.zip
いろいろいじってたら,立方体があるのはわかる様になった.
(背景の色を指定して,スケーリングを 0.1 ,視野角を大きく)
どうも,大きすぎる様なので -1 ~ 1 の範囲の立方体に編集.Cube_2.zip
テクスチャがうまく張り付かないので,OBJ や MTL をいろいろ編集…
MTL 内の newmtl とそれに続く名称との間のスペースが 1 つでないとうまくないみたい.Cube_3.zip
はっきりわからないが,4 を超える多角形の面が表示できない?
Win7 srv 2021
VirtualPC の Win 7 で,
ログの名前: System
ソース: srv
日付: 2014/04/25 10:33:13
イベント ID: 2021
タスクのカテゴリ: なし
レベル: 警告
キーワード: クラシック
ユーザー: N/A
コンピューター: DevS
説明:
サーバーは 60 秒間に 1 回、作業項目を割り当てることができませんでした。
検索すると,イベント ID 2021 およびイベント ID 2022 のトラブルシューティング方法.
メモリを 512 M だったのを 1024 に.
同じ様な状況下で 2021 は出ていないので,ひとまず様子見.
2014/05/22 追記
頻度はかなり減ったが,5/19 ~ 5/21 で何度かログが残っている.
VC 11 , 12
AtlGetCommCtrlVersion が,GetCommCtrlVersion になっている.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h 7505:
inline HRESULT AtlGetCommCtrlVersion(
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfc\winutil.cpp 243:
HRESULT GetCommCtrlVersion(
VC 12 の標準のインストールでは MBCS.exe が作成できない.
MSDN マルチバイト文字セット (MBCS) のサポート
—— ビルド開始: プロジェクト:ccVer, 構成:Debug Win32 ——
ccVer.cpp
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
c:\program files\windows kits\8.1\include\um\winnt.h(340):
error C2146: 構文エラー : ‘;’ が、識別子 ‘PVOID64’ の前に必要です。
c:\program files\windows kits\8.1\include\um\winnt.h(340):
error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\windows kits\8.1\include\um\winnt.h(12333):
error C2146: 構文エラー : ‘;’ が、識別子 ‘Buffer’ の前に必要です。
c:\program files\windows kits\8.1\include\um\winnt.h(12333):
error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
DX90SDK\Include が含まれていたのが原因.
c:\program files\microsoft visual studio 12.0\vc\include\xtgmath.h(206):
warning C4003: マクロ ‘round’ に指定された実引数の数が少なすぎます。
c:\program files\microsoft visual studio 12.0\vc\include\xtgmath.h(206):
error C2059: 構文エラー : ‘(‘
c:\program files\microsoft visual studio 12.0\vc\include\xtgmath.h(206):
error C2062: 型 ‘double’ は不要です。
c:\program files\microsoft visual studio 12.0\vc\include\xtgmath.h(224):
fatal error C1070: ソース ファイル ‘c:\…\vc\include\xtgmath.h’ 中で #if と #endif が対応していません。
Scale.hxx 等に定義されている #define round(v,p) … が影響していると思われる.
C99 になったことによる影響?
_MSC_VER はソースの先頭でも定義されているが,_MFC_VER は Afx.h の後でないと正しく取れない?
よく考えれば当然のこと?
MFC 11 で CFileStatus が変更された.
MFC 10 では, struct CFileStatus { CTime m_ctime; // creation date/time of file CTime m_mtime; // last modification date/time of file CTime m_atime; // last access date/time of file ULONGLONG m_size; // logical size of file in bytes BYTE m_attribute; // logical OR of CFile::Attribute enum values BYTE _m_padding; // pad the structure to a WORD TCHAR m_szFullName[_MAX_PATH]; // absolute path name #ifdef _DEBUG void Dump(CDumpContext& dc) const; #endif }; MFC 11 struct CFileStatus { CTime m_ctime; // creation date/time of file CTime m_mtime; // last modification date/time of file CTime m_atime; // last access date/time of file ULONGLONG m_size; // logical size of file in bytes DWORD m_attribute; // logical OR of CFile::Attribute enum values TCHAR m_szFullName[_MAX_PATH]; // absolute path name #ifdef _DEBUG void Dump(CDumpContext& dc) const; #endif };
Visual Studio 2012 の更新プログラムの概要
Visual Studio 2012 の更新プログラム 4
Download Center Visual Studio 2012 Update 4
VC 2012 で作成した exe は,Win XP で実行できない?
Visual Studio 2012 で Windows XP をターゲットとする Visual C++ アプリケーションを作成する方法
Wikipedia Microsoft Visual C++
Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ
Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
プロジェクトをサーバにコピーして,VC 8 でビルドすると
cl : コマンド ライン error D8022 : ‘\\devs\…\ArcEdit\Debug.080\RSP0000264523920.rsp’ を開けません
ローカルのプロジェクトは OK.
また,VC 6 なども C2039 はあるが,それなりに通る.
\\devs\…\helpvsty.hxx(57) : error C2039: ‘AtlGetCommCtrlVersion’ :
‘`global namespace” のメンバではありません。
これは,#define GetCommCtrlVersion AtlGetCommCtrlVersion としている所を,関数にして回避.
… GetCommCtrlVersion (…) { return AtlGetCommCtrlVersion (…) ; }
VC 7.1 と VC 8 で,ネットワーク上のプロジェクトをビルドするとうまくない様なので,中間ファイルの指定を変更.
.\$(ConfigurationName) を c:\Temp\$(ProjectName)\$(ConfigurationName) としてみた.
これにより,rsp や obj などが C:\Temp\…\Debug\ 以下になりうまく通る.
検索すると,.\$(ConfigurationName)\ の様に最後に ‘\’ を付ければ通るとのこと.
Error D8022 – can’t open .RSP file
2014/04/17
今までバックアップを取ったりする時に不要なファイルを消していたが,プロジェクトの設定などを変更してみた.
中間ディレクトリとデバッグ版の出力ディレクトリを c:\Temp\$(ProjectName)\$(ConfigurationName)\ に.
VC 10 以降で,フォールバック位置を指定(sdf , ipch の位置の指定).
VC 11 で,
LibHasp_Windows.lib(wurzl37.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
「リンカ」-「詳細設定」-「安全な…」の「はい (/SAFESEH)」をクリア.
C1083 msxml.dll
WinXP + VC 2005 環境のプロジェクトを,Win7 + VC 2008 でビルドすると,
\\devxp\…\xml_ms_.hxx(15) : fatal error C1083: タイプ ライブラリ ファイルを開けません。
‘msxml.dll’: No such file or directory
検索すると,
XML file parsing in Visual Studio 2008 & Windows 7
2014/08/19 追記
Win8 + VC 2012 でビルドすると
\\DevS\…\Xml_MS_.hxx(329): error C2039: ‘CLSID_DOMDocument’ : ‘MSXML2’ のメンバーではありません。
これで良いのかはわかってないが,#define CLSID_DOMDocument CLSID_DOMDocument60 を追加.
#if (_WIN32_WINNT >= 0x0600)
#import <msxml6.dll> named_guids
#define MSXML MSXML2
#define CLSID_DOMDocument CLSID_DOMDocument60
#else
#import <msxml.dll> named_guids
#endif
2019/06/29 Win10 VC 2005 で C1083 msxml.dll
2019/01 C++ と STL の範囲で書き直し
three.js
three.js の動作環境の作成のメモ
three.js の左の github から.
Usage の Download the minified library and …. の minified library を右クリックするなどしてダウンロード.
C:\Users\Public\Documents\WebGL\Three_js\three.min.js として保存.
This code creates a scene, …… in the document.body element. の下のスクリプトを Test3js.htm などとして保存.
その html の前の方と後ろの方を編集.
<!DOCTYPE html>
<html lang=”ja”>
<head><meta charset=”UTF-8″></head>
<body>
<script src=”three.min.js”> </script>
<script>
var camera, scene, renderer;
…
function init() {
…
renderer.render( scene, camera );
}
</script>
</body>
</html>
iPhone 3D – 5
110 ページまでやってのエラー.
/…/S_Wire/ApplicationEngine.cpp:57:14: Assigning to ‘ISurface *’ from incompatible type ‘Cone *’
…
/…/S_Wire/ApplicationEngine.cpp:62:14: Assigning to ‘ISurface *’ from incompatible type ‘MobiusStrip *’
ParametricSurface.hpp の ParametricSurface の定義で public ISurface が抜けていた.
ApplicationEngine.cpp::: Reference to type ‘const std::vector’ could not bind to an rvalue of type ‘Visual *’
どうも,107 ページで与えているのが Visual になってるが,vector<Visual> となる様に変更.
void ApplicationEngine::Render () const {
vector<Visual> visuals ;
Visual visual ;
visual.Color = m_Spinning ? vec3(1,1,1) : vec3(0,1,1) ;
visual.LowerLeft = ivec2(0,48) ;
visual.ViewportSize = ivec2(320,432) ;
visual.Orientation = m_Orientation ;
// m_RenderingEngine->Render(&visual) ;
visuals.push_back(visual) ;
m_RenderingEngine->Render(visuals) ;
}
今度はリンクエラー “ES1::CreateRenderingEngine()”, referenced from:
これは,タイプミス.e が抜けている.
IRenderingEngine* CreateRenderingEngine () {
return new RenderingEngine() ;
}
頂点法線の計算
今まで GL_FLAT で処理していたので面の法線を利用していた.
そのため,既に法線の情報が設定されたデータでうまく表示できてないものがあった.
glShadeModel(GL_SMOOTH) として,頂点に対して法線を設定することによりそれなりに表示する様にはなった.
これらのデータの様に,頂点の法線を求める必要が出てきた.
ここ(スムージング角度)を参考にさせてもらい,何とかそれなりに表示できる様になった.
GeForce GT 630 に変更
T5400 のグラフィックボードを Quadro FX 570 から GeForce GT 630 に変更.
サウンドデバイスが見つからない状態になり,音が出なくなった.
セットアップ時だったか,ボードのサウンド機能を利用する様な表示があった様な?
音が出ないことはそれほど問題ないと思っていたが,Skype などが出来ない.
それとは別の要因だが CD ドライブが開かなくなってしまった.以前から調子が悪かった.
グラフィックのドライバを何とか入れ直し,設定などを見たが,特に設定はなさそう.
検索すると,BIOS の設定で回避できるとある.
Auto から On にして,再起動.
すると,音は出る様になったが,表示が…
さらに再起動して,それなりの動作となった.
C2582
ちょっとわかりにくいエラーメッセージだったので,…
——————–構成: Read_3D – Win32 Debug——————–
コンパイル中…
c:\…\p_a_3ds.hxx(101) : error C2582: ‘operator ‘entry’ 関数は ” 内では使用できません。
cl.exe の実行エラー
Read_3D.exe – エラー 1、警告 0
MSDN では,
コンパイラ エラー C2582
‘identifier’ : 代入演算子 ‘operator =’ が、指定されたクラスに定義されていません。
指定されたクラスには、代入演算子 operator=() が定義されていません。
クラスを引数とする代入演算子を定義している場合は、コンパイラはデフォルトの代入演算子を生成しません。
代入演算子は、各クラスに対して明示的に定義しなければなりません。代入演算子は派生クラスに継承されません。
OCX x64
MFC を利用した x86 の ocx の 64 ビット化.
しばらくやってないので,Win XP 32 ビット環境の VC 6 で,スケルトンの作成から.
ActiveX Controls Inside Out を見ながら,スケルトンを作成.
そのままビルドして,ActiveX コントロール テスト コンテナ で,挿入してテスト.
OnDraw のEllipse を DrawText に書換え.
void C????Ctrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { // pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); // pdc->Ellipse(rcBounds); v_tstring buildMacros = ::Debug_GetMacroCC_v() ; CString macroStr = ::String_Join(buildMacros,_T("\r\n")).c_str() ; CRect rect = rcBounds ; pdc->DrawText(macroStr,rect,0) ; }
Debug_GetMacroCC_v は次の様なコード.
inline std::vector Debug_GetMacroCC_v (void) { std::vector typeAry ; #ifdef _WIN64 typeAry.push_back(_T("_WIN64 ")) ; #elif _WIN32 typeAry.push_back(_T("_WIN32 ")) ; #endif // ... #ifdef _MFC_VER typeAry.push_back(_T("_MFC_VER ")+::utot(_MFC_VER,16)+_T(" ")) ; #endif #ifdef _UNICODE typeAry.push_back(_T("_UNICODE ")) ; #endif // ... return typeAry ; }
今度は,Win 7 x64 環境で,VC 9 を利用しての確認.
「ActiveX コントロール テスト コンテナ」は,以前のバージョンとは異なり標準では存在しない.
検索するとサンプルにあるとのこと.
Win 7 環境には C:\…\VC2010Samples\C++\MFC\ole\TstCon があったので VC 10 でビルド.
VC 9 でスケルトンから作成して,OnDraw を同様に書換え.
また,構成マネージャを使用して x64 を追加.
それぞれの Release 版でビルド.
コントロールの登録は,管理者として起動した「コマンドプロンプト」で行っている.
それぞれの ocx のフォルダに移動し,regsvr32 ~.ocx として登録.
この時,ocx により?自動的に regsvr32 の 64 / 32 ビットそれぞれで登録されているみたい.
Excel 2010 で試すには,コントロールの挿入のために開発タブを有効にする必要がある.
String_Split
MB MFC | MB STL | WC MFC | WC STL | ||
99103040 | 5714 | 0 | 20 | 0 | 70 |
99103036 | 14192 | 10 | 130 | 10 | 380 |
99103032 | 27636 | 10 | 400 | 20 | 1400 |
99103051 | 41128 | 20 | 900 | 20 | 3200 |
99103026 | 65388 | 50 | 2400 | 50 | 7200 |
単位は m sec
表では MFC と表現しているが,実際は CStringArray を利用している程度.
ちょっと意外だったのが,STL のコードで,UNICODE 版が MBCS 版の 3 倍以上になってしまっている.
STL を利用しているコードは以下の通り.
std::vector<tstring> String_Split (const tstring& str_,LPCTSTR sp=_T(" \r\n"))
{
std::vector<tstring> strAry ;
tstring str = str_ ;
{
tstring::size_type spPos = tstring::npos ;
while ((spPos=::String_FindFirstOf(str,sp)) != tstring::npos) {
if (str.empty()) { break ; }
TCHAR fc = str[0] ;
if (fc == _T(‘\"’) || fc == _T(‘\”)) { // "—" or ‘—‘
if ((spPos=::String__Find(str,fc,1)) == tstring::npos) {
break ;
}
if ((spPos = ::String_FindFirstOf(str,sp,spPos)) == tstring::npos) {
break ;
}
}
tstring splitS = str.substr(0,spPos) ;
strAry.push_back(splitS) ;
str = str.substr(spPos+1) ;
if (str.empty()) { break ; }
}
if (!str.empty()) {
strAry.push_back(str) ;
}
}
return strAry ;
}
String_Join も同様だが,MFC 版 StringArrayToLine1 の 1 割程度なので,このままとする.
MFC 版 StringArrayToString は十分速い.
3DS
3DS 出力で正しくないのが生成されたので,バイナリを解析した時のメモ
http://www.dcs.ed.ac.uk/home/mxr/gfx/3d/3DS.spec
http://www.martinreddy.net/gfx/3d/3DS.spec
Chunk ID | 2 | |
データ長 | 4 | この次のデータの長さ + 6 |
データ |
4D4D
3D3D
AFFF
A000 名称
A020 15
0011 9 RGB
AFFF
…
4000 名称
4100
4110 頂点情報 ( WORD 頂点数 , [ float x , y , z ] )
4140 テクスチャ ( WORD 点数 , [ float x , y ] )
4160
4120 面情報 ( WORD 面数 , [ WORD 3 頂点のインデックス , WORD 面の情報 ] )
4130 材質名 , WORD 面数 , [ WORD 面のインデックス ]
4130
…
B000
…
頂点数が WORD を超えていたのが原因.
PgonsA_To3DS の objIs1==TRUE で,vp3Ary.GetCount() >= 0x10000 の時,PgonsA_To3DS (…,FALSE,…) .
ダイアログでのEyeChange
CStatic 内に表示するには,this ではなく &m_Image とする.
// u_Zoom. Init(this,&u_Scale) ;
u_Zoom. Init(&m_Image,&u_Scale) ;
// u_EyeChg. Init(&m_Image) ;
u_EyeChg. Init(this) ;
Eye eye(Eye::StdR) ;
u_EyeChg. SetEye (eye) ;
u_EyeChg. SetExtent(doc->PartsA_.GetExtent()) ;
u_EyeChg. Set_MouseEyeChange(TRUE) ;
// u_Zoom. Init(this,&u_Scale,&u_EyeChg) ;
u_Zoom. Init(&m_Image,&u_Scale,&u_EyeChg) ;
MButton , MouseWheel では,InvalidateRect などが必要.
void CAboutDlg::OnMButtonDown(UINT nFlags, CPoint point)
{
if (u_EyeChg. Event(GetCurrentMessage())) { return ; }
if (u_Zoom. Event(GetCurrentMessage())) { InvalidateRect(NULL) ; return ; }
CDialog::OnMButtonDown(nFlags, point);
}
BOOL CAboutDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
if (u_EyeChg. Event(GetCurrentMessage())) { return TRUE ; }
if (u_Zoom. Event(GetCurrentMessage())) { InvalidateRect(NULL) ; return TRUE ; }
return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}