ホーム » VC (ページ 10)
「VC」カテゴリーアーカイブ
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
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
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)」をクリア.