ホーム » VC (ページ 10)
「VC」カテゴリーアーカイブ
リモートデバッグ
以前仮想マシンの XP にリモート環境を作って,その当時はそれなりに使ったと思う.
どうも起動が不安定だったが,複数のアダプターが影響していた?
リモート PC は,TestInst .
ローカルは DevXP と T54W7U64 .
VC 6
プロジェクトの設定で,スタティックにするなどして,対象 exe 以外の dll などがなくても動作する様にしている.
リモート側で \\DevXP\….\Debug.060\i3DV.exe を実行できる様にする.
ローカル側でも同様の指定で実行可能な設定にしている.
VC 6 の設定で,メニューの「ビルド」-「デバッガリモート接続」でリモート PC を設定.
デバッグモニタの設定は,
VC 8
プロジェクトの設定は,場所が違うだけで内容は VC 6 と同じようなもの.
リモート側では exe はこの様に見える.
デバッグモニタの設定は,
デバッガで実行すると,i3DV.exe が起動する.
VC 10
リモートデバッガのインストールから.DVD 内の rdbgsetup_x86.exe を実行してインストール.
他は,VC 8 などと同様.
_MBCS _tcspbrk
MBCS.exe で _tcspbrk を使用していて,ファイルパスの 0x5c の認識がうまくなかった.
_tcs… の関数を MBCS exe としてデバッガで見てみると
30: LPTSTR result1 = _tcschr (_T(“Test”),_T(‘s’)) ;
0040238A push 73h
0040238C push offset string “Test” (0048b0b0)
00402391 call @ILT+985(__tcschr) (004013de)
00402396 add esp,8
00402399 mov dword ptr [ebp-10h],eax
31: LPTSTR result2 = _tcsstr (_T(“Test”),_T(“sp”)) ;
0040239C push offset string “sp” (0048b0ac)
004023A1 push offset string “Test” (0048b0b0)
004023A6 call strstr (0042d170)
004023AB add esp,8
004023AE mov dword ptr [ebp-14h],eax
32: LPTSTR result3 = _tcspbrk(_T(“Test”),_T(“sp”)) ;
004023B1 push offset string “sp” (0048b0ac)
004023B6 push offset string “Test” (0048b0b0)
004023BB call strpbrk (0042d130)
004023C0 add esp,8
004023C3 mov dword ptr [ebp-18h],eax
33: size_t result4 = _tcsspn (_T(“Test”),_T(“sp”)) ;
004023C6 push offset string “sp” (0048b0ac)
004023CB push offset string “Test” (0048b0b0)
004023D0 call @ILT+1260(__tcsspn) (004014f1)
004023D5 add esp,8
004023D8 mov dword ptr [ebp-1Ch],eax
Afx.h をインクルードすると?
576: int CString::FindOneOf(LPCTSTR lpszCharSet) const
…
579: LPTSTR lpsz = _tcspbrk(m_pchData, lpszCharSet);
5F42E312 mov edx,dword ptr [lpszCharSet]
5F42E315 push edx
5F42E316 mov eax,dword ptr [this]
5F42E319 mov ecx,dword ptr [eax]
5F42E31B push ecx
5F42E31C call _tcspbrk (5f4012b0)
5F42E321 add esp,8
5F42E324 mov dword ptr [lpsz],eax
35: LPTSTR result1 = _tcschr (_T(“Test”),_T(‘s’)) ;
00401D14 push 73h
00401D16 push offset string “Test” (004230b0)
00401D1B call @ILT+485(__tcschr) (004011ea)
00401D20 add esp,8
00401D23 mov dword ptr [ebp-14h],eax
36: LPTSTR result2 = _tcsstr (_T(“Test”),_T(“sp”)) ;
00401D26 mov esi,esp
00401D28 push offset string “sp” (004230ac)
00401D2D push offset string “Test” (004230b0)
00401D32 call dword ptr [__imp__strstr (00426668)]
00401D38 add esp,8
00401D3B cmp esi,esp
00401D3D call _chkesp (0040e246)
00401D42 mov dword ptr [ebp-18h],eax
37: LPTSTR result3 = _tcspbrk(_T(“Test”),_T(“sp”)) ;
00401D45 mov esi,esp
00401D47 push offset string “sp” (004230ac)
00401D4C push offset string “Test” (004230b0)
00401D51 call dword ptr [__imp__strpbrk (0042666c)]
00401D57 add esp,8
00401D5A cmp esi,esp
00401D5C call _chkesp (0040e246)
00401D61 mov dword ptr [ebp-1Ch],eax
38: size_t result4 = _tcsspn (_T(“Test”),_T(“sp”)) ;
00401D64 push offset string “sp” (004230ac)
00401D69 push offset string “Test” (004230b0)
00401D6E call @ILT+655(__tcsspn) (00401294)
00401D73 add esp,8
00401D76 mov dword ptr [ebp-20h],eax
VC 11 以降の ODMenu
自前の UndoRedo テンプレートで,VC 11 以降メニューの表示が更新されなくなった.
対応は,アプリケーションクラスのヘッダで,ODMRoot.hxx のインクルードを追加すれば良い.
これとは別の動的なメニューも正しく表示できてないが,こちらはまだ原因を特定できてない.
CCmdUI::SetText
コンストラクタで static
次の様なクラスで,VC 14 ではコンストラクタ内の static を呼出した段階で止まってしまう?
VC 12 まででは OK .
class T_static {
public:
T_static () ;
} ;
T_static::T_static ()
{
{
static T_static root ;
}
std::tout << _T("T_static") << std::endl ;
}
コンストラクタの初期化動作を次の様に変更.
T_static::T_static ()
{
static bool Initialized = false ;
if (!Initialized) {
Initialized = true ;
static T_static root ;
}
std::tout << _T("T_static") << std::endl ;
}
VC 6 コンソール AP を VC 11 で…
VC 6 コンソール AP を順にアップしたプロジェクトを VC 11 でビルドすると,
—— すべてのリビルド開始: プロジェクト: T_DbgCls, 構成: Debug Win32 ——
T_DbgCls.cpp
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57):
warning C4005: ‘__useHeader’ : マクロが再定義されました。
c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2872) :
’__useHeader’ の前の定義を確認してください
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77):
warning C4005: ‘__on_failure’ : マクロが再定義されました。
c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2882) :
’__on_failure’ の前の定義を確認してください
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(638):
error C2039: ‘SetDefaultDllDirectories’ : ‘`global namespace” のメンバーではありません。
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(638):
error C2065: ‘SetDefaultDllDirectories’ : 定義されていない識別子です。
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(640):
error C2065: ‘LOAD_LIBRARY_SEARCH_SYSTEM32’ : 定義されていない識別子です。
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
プロジェクト設定の,「プラットフォームツールセット」を「Visual Studio 2012 (v110) 」とすれば通る.
さらに,VC 12 では,
—— ビルド開始: プロジェクト:T_DbgCls, 構成:Debug Win32 ——
T_DbgCls.obj : warning LNK4075: /EDITANDCONTINUE は /OPT:LBR の指定によって無視されます。
LINK : fatal error LNK1104: ファイル ‘mfc120d.lib’ を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
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); }
VC2015
MSDN にあった C++ を使った “hello world” アプリの作成 (Windows 10) をやっていて,…
実行すると,
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘5a7750b3-af94-47d7-a064-b9adc49f8813_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘Windows はターゲット アプリケーションと通信できませんでした。これは通常、ターゲット アプリケーションのプロセスが中断されたことを示します。詳細については、[出力] ウィンドウ ([デバッグ]->[ウィンドウ]->[出力]) の [デバッグ] ペインで確認できます’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————
リビルドしたら通るようになった?が,今度は
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘5a7750b3-af94-47d7-a064-b9adc49f8813_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘アプリは必要な時刻に開始されませんでした’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————
全く実行されてないわけではないので,もっと別の所に原因があるのかもしれない.
VB のプロジェクトを生成して,ビルド,実行すると
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘b4f551ca-330f-478f-ab2e-c23232b2918c_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘アプリは開始されませんでした’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————
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
VC 10 でビルドした exe を XP で…
以前から VC10 以降でビルドした exe が Win XP 環境で起動できてなかった(ビルド環境の Win 7 では OK).
—————————
M—.exe – エントリ ポイントが見つかりません
—————————
プロシージャ エントリ ポイント K32GetProcessMemoryInfo がダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。
—————————
OK
—————————
日本語化された GetProcessMemoryInfo には書かれてないが,
こちら (GetProcessMemoryInfo function) には,Win 7 以降変わっているような記述がある.
対応としては App.h(アプリケーションクラスのヘッダファイル)に以下を追加した.
#ifndef PSAPI_VERSION
#define PSAPI_VERSION 1
#pragma comment (lib, “PSAPI.Lib”)
#else
#pragma message (“defined PSAPI_VERSION *************”)
#endif
IIS での ActiveX.exe
次の様なコードで,環境により?サーバの exe が終了されないことがある.
dim oHV
set oHV = Server.CreateObject(“AsHVXxx.Application”)
Response.Write “AsHV….App ” & oHV.GetVersion & “<br>” & vbCrLf
set oHV = Nothing
AsHVxx.exe ~.Application のみ
Win XP , 7 とも正しく終了する.
PAtoXx.exe
Win XP 環境で,デバッグ版 exe は OK .
Win 7 では正しく終了している.
2015/02/19
PAtoXx.exe の OnInitDialog で,環境設定用のダイアログが表示されて止まってしまっていた.
で,単純にメッセージボックスなどを表示しているならばすぐわかったはずだが,…
普通の exe としての起動の場合は,ダイアログは表示されない.
ASP のオートメーションとして起動された場合は,見えないがダイアログが表示されて止まっている.
ダイアログが表示される条件は,設定値が正しいフォルダをさしていない場合.
c:\ProgramData\… の様にローカルをさしている場合は,どちらの起動でもダイアログが表示されないで処理を継続.
\\T54W7U64\Documents\… の場合,当然であるが単純起動の exe では OK でダイアログは表示されない.
これが ASP から起動されると _taccess で正しく判断できず,ダイアログが表示されて止まっている.
CFile::GetStatus でもうまく判断できない?
2015/02/24
MFC クラスウィザードからの「クラスの新規作成」で 「CCmdTarget」 「タイプ ID で作成」したものも終了されない?
利用している所は次の様な感じ.
set oM_P_ = Server.CreateObject(“AsXxxxX.Path”)
デフォルトで作成されている ~.Application を利用することで終了できる.
set oM_S_ = Server.CreateObject(“AsXxxxx.Application”)
この動作は,vbs でも同様に確認できる.
2015/03/05
AsXxxS.exe を修正していて Win 7 環境で,
Server オブジェクト エラー ‘ASP 0177 : 80080005’
Server.CreateObject に失敗しました
/Test/Test_3rd/D_Path_1.asp, 行 7
80080005
XP 環境では OK .
設定関連の漏れがあると思うが,それまで通っていたのでコードを変更.
以下が新しく追加した部分
{
#if defined _UNICODE
folder = ::FolderAddLastSP(folder) + _T(“WC”) ;
#elif defined _MBCS
folder = ::FolderAddLastSP(folder) + _T(“MB”) ;
#endif
// ::CreateFolder(folder) ;
if (::FolderIsNothing(folder)) {
if (::CreateDirectory(folder,NULL)) { folder = folder+_T(“\\”) ; }
}
}
最初 CreateFolder としていた所を,CreateDirectory に変更することで対応.
この関数は,デバッグ情報をファイルに出力しているが,Win 7 環境ではファイルが生成されてない.
%Temp% (c:\Windows\Temp) 以下に AsImgCnv….\EMF などのフォルダを作成して,生成した emf を保持している.
綺麗な状態に戻そうとして,EMF フォルダを削除して実行すると,
エラー ‘80010105’
/Test/Test_2nd/CallAS/E/SelectPage.asp, 行 148
AsImgConv… フォルダのアクセス権を変更してしまった事が原因か?
どの様に設定すべきかわからず,AsImgCnv… フォルダをエクスプローラで削除して対応.
もう一回,うまく行っている状態で EMF フォルダを削除.
どうも設定ではなくコードが悪いみたいで,影響していそうな所を見てみると,
CacheFile::GetFolder で ::CreateFolder を呼んでいる.
::CreateFolder を MFC を使用していない ::Folder_Create に置換えてみた.
停止(’ASP 0177 : 80080005’)することはなくなったが,まだ何かありそう.
EMF のフォルダが生成されない.
2015/03/10
結局,%Temp% は利用しない様に変更した.
どういう条件かわからないが,c:\Windows\Temp\DbgDump\ にはデバッグ情報が正しく出力されてなかった.
(Win XP では意図した動作だったと思う)
2015/03/30
%Temp% でなく Public\Documents\ 以下にしたが,それだけでは完全ではなさそう.
アクセス権の関係と思うが,パブリックフォルダの共有設定が必要?
VC 6 UNICODE C2664 , C2679 …
VC 6 コンソール AP で _UNICODE とした時,部分的に効いていない?様なエラー.
--------------------構成: T_RegKey - Win32 Release-------------------- コンパイル中... T_RegKey.cpp ...\_s_func.hxx(71) : error C2664: 'wcscpy' : 1 番目の引数を 'char *' から 'unsigned short *' に変換できません。 ...\_s_func.hxx(72) : error C2664: 'wcslen' : 1 番目の引数を 'const char *' から 'const unsigned short *' に... ...\StringFn.hxx(277) : error C2679: 二項演算子 '=' : 型 'unsigned short [3]' の右オペランドを扱う演算子は定義... ...\StrAryFn.hxx(118) : error C2665: 'wcspbrk' : 2 のオーバーロードは 1 番目の引数を 'char *' から要求の型に変換... ... T_RegKey.obj - エラー 86、警告 0
先頭で #include <Afx.h> などとすればコンパイルは通る.
または,次の様に UNICODE を定義すれば良いみたい.
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
以前にも同じことを書いていた.
#include <Afx.h> などを追加した場合は,
--------------------構成: T_RegKey - Win32 Release-------------------- リンク中... uafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です uafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です c:\...\Release.060/T_RegKey.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー T_RegKey.exe - エラー 3、警告 0
「プロジェクトの設定」-「一般」の「M..F..C..」で「共有 DLL で MFC を使用」などとする.
UNICODE の定義は,(VS12)\VC\AtlMFC\Include\AfxV_W32.h を参照して i_Define.hxx に追加した.
Windows.h より前に UNICODE が定義されてない場合は,i_Define.hxx をインクルードすれば良い.
2020/09 コンソール AP での define
コンテキストメニューが表示されない
あるダイアログベースの exe をテストしていて,右クリックでメニューが表示されない現象となった.
ボタンによる動作のメニューは表示される.
デバッガで追いかけると,次の様なコードの CMenu::LoadMenu が FALSE となっていた.
void CXxxxDlg::PopupSingleSel(CPoint pt,CWnd *wnd)
{
CMenu menu ;
if (!menu.LoadMenu(IDR_SINGL_SEL)) { return ; }
CMenu* pPopup = menu.GetSubMenu(0);
…
}
ボタンによるメニュー表示は次のコード.
void CXxxxDlg::OnOther()
{
CMenu menu ;
if (!menu.LoadMenu(IDR_OTHER)) { return ; }
CMenu* pPopup = menu.GetSubMenu(0);
…
}
double -> long
double の値を long にキャストした時,VC 8 で思った動作ではなかったので調べてみた.
テストに使用したのは次の様な単純なコード.
// T_DtoI.cpp
#include <iostream>
int main(int argc, char* argv[])
{
double d8 = 1/7. ;
for (int index=0 ; index<25 ; index++) {
d8 = (d8 * 7) ;
__int64 i8 = __int64(d8) ;
long l4 = long(d8) ;
printf ((“%15g\t%25I64d\t%20I64x\t%15ld\t%15x\n”),d8,i8,i8,l4,l4) ;
}
return 0;
}
d8 の値を /7 と *7 としているのはあまり意味はない.
C:\Users\Iwao>\\DevXP\C_Drive\Temp\TestCPP\T_DtoI\Release.060\T_DtoI.exe 1 1 1 1 1 7 7 7 7 7 49 49 31 49 31 343 343 157 343 157 2401 2401 961 2401 961 16807 16807 41a7 16807 41a7 117649 117649 1cb91 117649 1cb91 823543 823543 c90f7 823543 c90f7 5.7648e+006 5764801 57f6c1 5764801 57f6c1 4.03536e+007 40353607 267bf47 40353607 267bf47 2.82475e+008 282475249 10d63af1 282475249 10d63af1 1.97733e+009 1977326743 75db9c97 1977326743 75db9c97 1.38413e+010 13841287201 339014821 956385313 39014821 9.6889e+010 96889010407 168f08f8e7 -1895237401 8f08f8e7 6.78223e+011 678223072849 9de93ece51 -381759919 e93ece51 4.74756e+012 4747561509943 45160b7a437 1622647863 60b7a437 3.32329e+013 33232930569601 1e39a5057d81 -1526366847 a5057d81 2.32631e+014 232630513987207 d39383266e87 -2094633337 83266e87 1.62841e+015 1628413597910449 5c908960d05b1 -1777531471 960d05b1 1.13989e+016 11398895185373144 287f3c1a5b27d8 442181592 1a5b27d8 7.97923e+016 79792266297612000 11b7aa4b87e16e0 -1199696160 b87e16e0 5.58546e+017 558545864083283968 7c05a810b72a000 192061440 b72a000 3.90982e+018 3909821048582987776 3642798750226000 1344430080 50226000 2.73687e+019 -9223372036854775808 8000000000000000 0 0 1.91581e+020 -9223372036854775808 8000000000000000 0 0 C:\Users\Iwao>\\DevXP\C_Drive\Temp\TestCPP\T_DtoI\Release.080\T_DtoI.exe 1 1 1 1 1 7 7 7 7 7 49 49 31 49 31 343 343 157 343 157 2401 2401 961 2401 961 16807 16807 41a7 16807 41a7 117649 117649 1cb91 117649 1cb91 823543 823543 c90f7 823543 c90f7 5.7648e+006 5764801 57f6c1 5764801 57f6c1 4.03536e+007 40353607 267bf47 40353607 267bf47 2.82475e+008 282475249 10d63af1 282475249 10d63af1 1.97733e+009 1977326743 75db9c97 1977326743 75db9c97 1.38413e+010 13841287201 339014821 -2147483648 80000000 9.6889e+010 96889010407 168f08f8e7 -2147483648 80000000 6.78223e+011 678223072849 9de93ece51 -2147483648 80000000 4.74756e+012 4747561509943 45160b7a437 -2147483648 80000000 3.32329e+013 33232930569601 1e39a5057d81 -2147483648 80000000 2.32631e+014 232630513987207 d39383266e87 -2147483648 80000000 1.62841e+015 1628413597910449 5c908960d05b1 -2147483648 80000000 1.13989e+016 11398895185373144 287f3c1a5b27d8 -2147483648 80000000 7.97923e+016 79792266297612000 11b7aa4b87e16e0 -2147483648 80000000 5.58546e+017 558545864083283968 7c05a810b72a000 -2147483648 80000000 3.90982e+018 3909821048582987776 3642798750226000 -2147483648 80000000 2.73687e+019 -9223372036854775808 8000000000000000 -2147483648 80000000 1.91581e+020 -9223372036854775808 8000000000000000 -2147483648 80000000
VC 7 , 7.1 は VC 6 と同等.VC 12 までは VC 8 と同等.
Mac 64 ビットでは,long が 64 ビットのため?そのままだと VC 6 と同等になる.
long を int として 32 ビットとすると VC 8 と同等.
ここまでは,long の範囲を超えたためと理解できるが,unsigned long の場合はまた動作が異なる.
long l4 = long(d8) ;
ULONG u4 = ULONG(d8) ;
printf ((“%15g %25I64d %20I64x %12ld %10x %12ld %10x\n”),d8,i8,i8,l4,l4,u4,u4) ;
今回表面化したバグは,次のコード.
long now_Tick = long(GetTickCount_s()*1000) ;
得た値を覚えておき,次のタイミングで 1 秒以上の開きがあるかを計測したかった.
最初の頃はわからなかったが,
先日 25 日(0x7FFFFFFF 2,147,483,647)を過ぎて 0x80000000 となってしまっていた.
MSDN 浮動小数点型からの変換
コンボボックスで文字化け
「今まで CHS で使用していた環境を日本語に切替えたのに,一部 “漢字” で表示されたままになっている」と問合せ.
UNICODE.exe なので,MultiByte との変換の時には問題が発生することは知っていたが,…
メニューやダイアログのタイトルなどは問題ないが,コンボボックスで文字化けしていた.
「コントロールパネル」-「地域と言語」-「管理」タブ-「Unicode 対応…」-「システム ロケール…」が「日本語」でなかった.
UNICODE.exe でも,コンボボックスでは文字化けすることは知らなかったので,exe を作って調べてみた.
MBCS.exe .半角カタカナなども文字化けしてしまう.
UNICODE.exe .コードで追加している場合は,正しく表示される.
m_ComboD.AddString(_T(“1234567890”)) ;
m_ComboD.AddString(_T(“12345”)) ;
m_ComboD.AddString(_T(“ABCDEFGHIJ”)) ;
m_ComboD.AddString(_T(“ABCDE”)) ;
m_ComboD.AddString(_T(“あいうえお”)) ;
m_ComboD.AddString(_T(“亜意卯絵尾”)) ;
VC 2013 で同様に作成してみたが,
最初,リソースエディタで複数指定する方法がわからなかったが,セミコロンで区切れば OK .
コンボボックスの表示データを,リソースで指定している場合に文字化けしてしまう.
ComboBox.zip
これらに関して検索してみると,
UNICODEアプリケーションで文字化けが発生する
リソースファイルの文字列のUNICODE化
OpenGL Programing Guide
何年も前に買った本(1995年8月10日第4刷となってる)で,中に含まれるサンプルを実行できる様にしてみた.
OpenGL Programing Guide
サンプルのソースで,<gl\glut.h> のインクルードは最初に移動.
glut
opengl.org
GLUT and OpenGL Utility Libraries
GLUT – The OpenGL Utility Toolkit
Nate Robin’s GLUT for Windows page
glut32.dll は,system32 などへ.
glut.h は,~\Include\gl へ.
glut32.lib は,~\Lib へ.
セレクション
::glRenderMode(GL_SELECT) の後の ::glRenderMode(GL_RENDER) で,セレクションヒット数が得られる.
::glGetIntegerv(GL_RENDER_MODE) で現在のモードを取得可能.
セレクションバッファの内容
名前の深さ?
Z min
Z max
名前 …
2014/09/04
時間がかかったがなんとか GLUT ではできた.
2014/09/08
今度は,VXxxxView を使用した SDI.exe での手順.
ビューの OnDropFiles で,ファイルの種類により glRenderMode GL_SELECT , GL_RENDER を呼ぶ様に変更.
CMainFrame::OnDropFile で条件により CXxxxView::OnDropFile を呼び出し.
glGetIntegerv(GL_RENDER_MODE,…) で GL_SELECT が返ってこない.
wglMakeCurrent を呼んでなかったので,効果がなかった.
今度は,GL_SELECT にならない.GL_INVALID_OPERATION となる.
ヘルプにある様に,glSelectBuffer を呼んでなかった.
CPickSView::OnDropFiles
GetOpGLP()->MakeCurrent(TRUE) ;
if (…) {
::glSelectBuffer(BUFSIZE,selBuf) ;
::glRenderMode(GL_SELECT) ;
}
else {
::glRenderMode(GL_RENDER) ;
}
GetOpGLP()->MakeCurrent(FALSE) ;
2014/09/10
PickS.2014.09.09.zip
マウスの Y 方向の位置が合ってない.
その exe を Win 7 環境で動かすと,
デバッグ用に ::glGetIntegerv(GL_RENDER_MODE,…) のために GetOpGLP()->MakeCurrent(…) していた.
MakeCurrent(FALSE) で SwapBuffers を呼んでいる.
マウスの Y 方向は,縦長だと合っていそう.横長だとその長い分だけ Y 方向にずれている?
コの字型の平面方向で,座標はそれなりにとれている.::gluUnProject の z は Depth / 0xffffffff .
gulUnProject の y の与え方が違っていた.
viewPort[3] – pt.y としていたが,それではダメみたいで,GetClientRect の Height() としてうまくいってそう.
PickS.2014.09.10.zip
まだ ::gluPickMatrix の方がうまくできてない.
2014/09/11
平面図にして,1 つの直方体がウィンドウいっぱいに表示される状態で選択すると,
どうもピック領域のサイズが,ウィンドウの大きさになっているような感じ.
20 Picking and Using Selection 20. ピッキングとセレクションの使い方 を参考にしているが,…
::gluPickMatrix を呼ぶタイミングが悪かったのが原因.
ある程度予想はしていたが,OpGL::Projection の中のため,その関数を分割する必要がありそう.
その関数内の OpenGL の呼び出しは,
::glMatrixMode(GL_PROJECTION) ;
::glLoadIdentity() ;
// ここ
::glOrtho(r.l,r.r,r.b,r.t, zNear,zFar) ; / ::gluPerspective(deg(angle),aspect, zNear,zFar) ;
::glViewport((GLint)win.l,(GLint)win.b,(GLint)(win.r-win.l),(GLint)(win.t-win.b)) ;
glLoadIdentity() の後に ::gluPickMatrix を呼ばなければならない.
PickS.2014.09.11.zip
2014/09/18
汎用的なコードにするため,コードを見直しているがなかなか進まない.
例えば,マウスの移動で選択されているものを表示しようとすると,テクスチャありでは遅くて使えない.
また,その時の表示で PgonsA の描画を抜き出したコードだと何とか見れるが PartsA::Draw 相当だと遅い.
PickS.2014.09.18.zip
‘THIS_FILE’ がシンタックスエラーを…
今まで通っていたプロジェクトで,
ComPrj03.cpp
c:\…\memory(16) : error C2061: 構文エラー : 識別子 ‘THIS_FILE’ がシンタックスエラーを起こしました。
c:\…\memory(17) : error C2091: 関数は関数を返せません。
c:\…\memory(17) : error C2809: ‘operator new’ に仮引数リストがありません。
c:\…\memory(20) : error C2954: テンプレートの定義はネストできません。
cl.exe の実行エラー
ComPrj03.obj – エラー 4、警告 0
ソースの先頭付近に #include <memory> を追加.
#include “StdAfx.h”
#include “ComPrj00.hpp”
#include <memory>
2019/01/18
--------------------構成: MkZIP2 - Win32 Release-------------------- コンパイル中... MkZIP2.cpp リンク中... MkZIP2.exe - エラー 0、警告 0 --------------------構成: MkZIP2 - Win32 Debug-------------------- コンパイル中... MkZIP2.cpp c:\program files\microsoft visual studio\vc98\include\memory(16) : error C2061: 構文エラー : 識別子 'THIS_FILE' がシンタックスエラーを起こしました。 c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2091: 関数は関数を返せません。 c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2809: 'operator new' に仮引数リストがありません。 c:\program files\microsoft visual studio\vc98\include\memory(20) : error C2954: テンプレートの定義はネストできません。 cl.exe の実行エラー MkZIP2.exe - エラー 4、警告 0
#include “stdafx.h”
#include “MkZIP2.h”
#include <ShlObj.h>
#import <Shell32.dll> // named_guids
//#include <memory>
エラーになるのはデバッグ版のビルド.リリース版では通る.
#include <memory> を有効に.
2023/03/24
#define new DEBUG_NEW より後にインクルードしているとうまくない error C2061 , C2091 , C2809 , C2556