ホーム » 2014
年別アーカイブ: 2014
デバッグビルドで C2061 ‘_DebugHeapTag_func’
以前(2014/04/25 の exe が存在する)は通っていたのに,…
------ ビルド開始: プロジェクト: BLCombi, 構成: Debug Win32 ------ ComPrj01.cpp c:\program files (x86)\microsoft visual studio 9.0\vc\include\xlocmon(283) : error C2061: 構文エラー : 識別子 '_DebugHeapTag_func' c:\program files (x86)\microsoft visual studio 9.0\vc\include\xlocmon(281): クラス テンプレート のメンバ関数 'size_t std::moneypunct<_Elem,_Intl>::_Getcat(const std::locale::facet **,const std::locale *)' のコンパイル中 with [ _Elem=char, _Intl=true ] c:\program files (x86)\microsoft visual studio 9.0\vc\include\xlocmon(908) : コンパイルされたクラスの テンプレート のインスタンス化 'std::moneypunct<_Elem,_Intl>' の参照を確認してください with [ _Elem=char, _Intl=true ] BLCombi - エラー 1、警告 1
------ ビルド開始: プロジェクト: BLCombi, 構成: Debug Win32 ------ ComPrj01.cpp c:\program files\microsoft visual studio 8\vc\include\xlocmon(273) : error C2061: 構文エラー : 識別子 '_DebugHeapTag_func' c:\program files\microsoft visual studio 8\vc\include\xlocmon(271): クラス テンプレート のメンバ関数 'size_t std::moneypunct<_Elem,_Intl>::_Getcat(const std::locale::facet **)' のコンパイル中 with [ _Elem=char, _Intl=true ] c:\program files\microsoft visual studio 8\vc\include\xlocmon(887) : コンパイルされたクラスの テンプレート のインスタンス化 'std::moneypunct<_Elem,_Intl>' の参照を確認してください with [ _Elem=char, _Intl=true ] BLCombi - エラー 1、警告 0
------ ビルド開始 : プロジェクト : BLCombi, 構成 : Debug Win32 ------ ComPrj01.cpp c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xlocmon(249) : error C2061: 構文エラー : 識別子 '_DebugHeapTag' c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xlocmon(247): クラス テンプレートのメンバ関数 'size_t std::moneypunct<_Elem,_Intl>::_Getcat(const std::locale::facet ** )' のコンパイル中 with [ _Elem=char, _Intl=true ] c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xlocmon(828) : コンパイルされたクラスのテンプレートのインスタンス化 'std::moneypunct<_Elem,_Intl>' の参照を確認してください with [ _Elem=char, _Intl=true ] BLCombi - エラー 1、警告 0
------ ビルド開始 : プロジェクト : BLCombi, 構成 : Debug Win32 ------ ComPrj01.cpp c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xloctime(539) : error C2061: 構文エラー : 識別子 '_DebugHeapTag' c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xloctime(539) : error C2143: 構文エラー : ';' が ')' の前にありません。 BLCombi - エラー 2、警告 0
VC 6 や VC 10 , 11 , 12 では 通る.
検索すると, #define new DEBUG_NEW の定義の様であるが,この ComPrj01.cpp でどうすべきかが不明.
本来は,ComPrj01.cpp でインクルードしているファイルを変更すべきなのだろうが,いい方法がわからない.
ComPrj01.cpp でインクルードしているものの順番を変更することで,通る様にはなった.
2024/11/11
https://dev.mish.work/wordpress/?s=C2061
コンボボックスで文字化け
「今まで 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化
xcode + glut
「Command Line Tool」としてプロジェクトを作成.
「GLUT」を追加.
10.9 になったこと?により出力される次の様なワーニングをでない様にするために 10.8 に.
/Users/Iwao/…/main.cpp:116:2: ‘glutInit’ is deprecated: first deprecated in OS X 10.9
インクルードパス設定場所は,「Build Settings」−「Search Paths」−「Header Search Paths」
glut.h のインクルードは以下の様にしている.
#ifdef __APPLE_CC__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
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
COleDataSource を利用した Drag
以前 DoDragDrop で少し調べたが,その時は途中になっていた.
その時の内容で,例えば CListBox に表示されてるファイルリストのすべてを,CListBox の外側でドラッグするすることはできる.
void CDragLBDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CStringArray sa ;
::ToStringArray(FileNames,&sa) ;
::StringArrayToDoDragFiles(sa) ;
}
CListCtrl であれば,OnBegindragXxxx が利用できるので,
void CDragLVDlg::OnBegindragListFiles(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
{
CStringArray sa ;
for (int index=0 ; index<m_ListFiles.GetItemCount() ; index++) {
if (m_ListFiles.GetItemState(index,LVIS_SELECTED) == LVIS_SELECTED) {
tstring str = FileNames[index] ;
sa.Add(str.c_str()) ;
}
}
if (sa.GetSize() > 0) {
::StringArrayToDoDragFiles(sa) ;
}
}
*pResult = 0;
}
今回やりたかったのは,CListBox の項目のドラッグ.
ドラッグ部分は CListCtrl とほぼ同様となると思われるが,ドラッグ開始のタイミングが取れない.
CDragListBox と開始時の動きは似ているが,MFC のコードを見るとちょっと難しそう.
いろいろと検索すると,CListBox のサブクラス化で対応するみたいとわかったが,手順が...
動的なサブクラス化と言うらしい.
Inside Visual C++ には,囲み記事に CNonNumericEdit がある.
利用する手順はわかるが,作成する手順がわからない
今も利用はしている CView からの VXxxxView ファミリがあるが,10 年以上前で手順は覚えてない.
いろいろ探して「MFC クラスウィザード」を利用することがわかった.
今まで,よく見ていたダイアログなのに...
後は,WM_LBUTTONDOWN を処理する様にして,
void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
CListBox::OnLButtonDown(nFlags, point);
int sel = GetCurSel() ;
if (sel == LB_ERR) { return ; }
CString str ;
GetText(sel,str) ;
CStringArray sa ;
sa.Add(str) ;
::StringArrayToDoDragFiles(sa) ;
}
ダイアログに追加したリスボックスで,これを利用する様にダイアログのヘッダを修正.
MSDN CTRLTEST サンプル
テクニカル ノート 14
標準コントロールからのコントロールの派生
[MSVC] MFCを使用しての動的サブクラス化
Create Client Windows, Drag and Drop Between Listboxes
2014/08/11 追記
COleDataSource を利用して,他の AP に CF_HDROP で渡そうとすると,
—————————
Microsoft Visual C++ Debug Library
—————————
Debug Assertion Failed!
Program: …Documents\Visual Studio 2010\Projects\TestVC10\Debug\T_SC.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\cmdtarg.cpp
Line: 43
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
—————————
中止(A) 再試行(R) 無視(I)
—————————
COleDataSource の使い方が間違っていた.
開放する時に delete ではうまくない.
データ オブジェクトとデータ ソース : 作成と破棄
モードレスダイアログの動作が,…
VC 7 以降,MDI AP のモードレスダイアログが独立して動作してしまう現象があった.
その AP は,VC 4 の頃作成したもので CMainFrame::OnCreate 内でモードレスダイアログを作成している.
VC 6 までは特に問題なかったが,VC 7 以降タスクバーにアイコンが 2 つ存在する状態になってしまっていた.
過去に何度か対応方法を調べたが,わからずそのままとなっていた.
今日別の事を調べていて,「モードレスダイアログで親子にならなくする」方法が目に留まった.
CDialog::Create で,デフォルトの NULL ではなく,GetDesktopWindow() を与えるというもの.
VC 7 AP のダイアログの情報を,Spy++ で見ると,親ウィンドウが (なし) になっている.
今度はデバッガで,Create の付近を追いかけると AfxGetMainWnd() で NULL がかえっている.
ThrdCore.cpp より
CWnd* CWinThread::GetMainWnd()
{
if (m_pActiveWnd != NULL)
return m_pActiveWnd;
if (m_pMainWnd != NULL)
return m_pMainWnd;
return CWnd::GetActiveWindow();
}
CXxxApp::InitInstance で以下の部分を修正.
CMainFrame* pMainFrame = new CMainFrame;
m_pMainWnd = pMainFrame; // ここを追加
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
CSplitterWnd – 2
SDI で,MDI の「新しいウィンドウを開く」で 4 つのビューを表示した様な動作が欲しかったので,調べてみた.
動的な分割ウィンドウである程度の所まではできそう.
1. MainFrm.h の CMainFrame に以下を追加. CSplitterWnd m_wndSplitter; virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext); 2. CMainFrame::OnCreateClient の追加. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { { if (!m_wndSplitter.Create(this,2, 2,CSize(10, 10), pContext, WS_CHILD | WS_VISIBLE /* | WS_HSCROLL | WS_VSCROLL */ | SPLS_DYNAMIC_SPLIT)) { TRACE0("Failed to create split bar "); return FALSE; } return TRUE; } } スクロールバーを付加したくなかったので,6 つ目のウィンドウスタイルを変更している. テスト用に分割動作をコマンドとして実装. void CMainFrame::OnSplit() { if (IsSplit) { if (m_wndSplitter.GetColumnCount() > 1) { m_wndSplitter.DeleteColumn(1) ; } if (m_wndSplitter.GetRowCount() > 1) { m_wndSplitter.DeleteRow (1) ; } IsSplit = !IsSplit ; } else { CRect rect ; m_wndSplitter.GetClientRect(&rect) ; if (m_wndSplitter.GetColumnCount() == 1) { m_wndSplitter.SplitColumn(rect.Width ()/2) ; } if (m_wndSplitter.GetRowCount() == 1) { m_wndSplitter.SplitRow (rect.Height()/2) ; } IsSplit = !IsSplit ; } }
2 x 2 の分割ウィンドウのコントロールの ID (Spy++ で確認)
左上(0,0) E900 AFX_IDW_PANE_FIRST
右上(0,1) E901
左下(1,0) E910
右下(1,1) E911
ビューの OnDraw を以下の様に書き換えると
void CSpltWView::OnDraw(CDC* pDC) { int row = -1 ; int clm = -1 ; CMainFrame* mw = (CMainFrame*)AfxGetMainWnd() ; CSplitterWnd* sw = &mw->m_wndSplitter ; CString str ; if (sw->IsChildPane(this,&row,&clm)) { int id = sw->IdFromRowCol(row,clm) ; CString tmp1 ; tmp1.Format(_T("row = %d , clm = %d"),row,clm) ; CString tmp2 ; tmp2.Format(_T("IdFromRowCol = %04X"), id) ; str += tmp1 + _T("\r\n") ; str += tmp2 + _T("\r\n") ; } { UINT nID = GetDlgCtrlID() ; CString tmp ; tmp.Format(_T("GetDlgCtrlID = %04X"),nID) ; str += tmp + _T("\r\n") ; } { CWnd* pw = GetParent() ; CString tmp1 ; tmp1.Format(_T("Splitter = %08x "),sw->GetSafeHwnd()) ; CString tmp2 ; tmp2.Format(_T("Parent = %08x "),pw->GetSafeHwnd()) ; str += tmp1 + _T("\r\n") ; str += tmp2 + _T("\r\n") ; } CRect rect ; GetClientRect(rect) ; rect.top = rect.left = 10 ; pDC->DrawText(str,rect,0) ; }
MFC の ソースを眺めていると CView::GetParentSplitter があったので,間接的にはそれを使えば良さそう.
ビューでどの位置かを求めるだけなら, short texNo = 0 ; { UINT nID = GetDlgCtrlID() ; switch (nID) { case AFX_IDW_PANE_FIRST + 0x00 : texNo = 1 ; break ; case AFX_IDW_PANE_FIRST + 0x01 : texNo = 2 ; break ; case AFX_IDW_PANE_FIRST + 0x10 : texNo = 3 ; break ; case AFX_IDW_PANE_FIRST + 0x11 : texNo = 4 ; break ; } }
‘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
時刻の同期
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