MFC 10 再起動マネージャ
再起動マネージャのサポートの追加
http://msdn.microsoft.com/ja-jp/library/dd465232(v=VS.100).aspx
CXxxxApp::CXxxxApp()
{
#if (_MFC_VER >= 0x0A00)
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS ;
#endif
}
AppCore.cpp CWinApp::CWinApp(LPCTSTR lpszAppName)
m_nAutosaveInterval = 5 * 60 * 1000; // default autosave interval is 5 minutes (only has effect if autosave flag is set)
2021/11
https://mish.myds.me/wordpress/dev/2021/11/19/restart-manager/
VC++ 2010 VCReDist_??.exe
VC++ 2010 の VCReDist の場所
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86
または,
VCReDist_x86
VCReDist_x64
X02T メモ
「スタート」-「設定」-「個人」-「電話」-「サービス」タブ-「転送電話」内
Wi-Fi 接続中の SoftBank メールの送受信など
一時的に止めないと,Wi-Fiが優先される
設定などで,自動的に起動(Power ON)させることは可能か?
その様な機能はない
SoftBank メールの,「メール振り分け設定」
ドメイン指定は不可
10 件まで
SoftBank メールの「未読」が常に1つ存在する現状の対応方法としては,ハードリセットが必要
HKEY_LOCAL_MACHINESoftwareArcsoftArcSoft MMS UAConfigUI の MMSUnreadCount を 0 に
TRE Ver.0.82 を利用(0.90 はインストールできなかった)
CCriticalSection と CMutex
P4 | VirtualPC | Xeon | |
CCriticalSection | 734 | 160 | 94 |
*1 | 78 | 20 | 15 |
CMutex | 8200 | 710 | 1140 |
*1 | 950 | 250 | 437 |
Profile INI | 2900 | 950 | 920 |
Reg | 2100 | 570 | 740 |
ElapseTick et_cs ;
{
CCriticalSection cs ;
for (int index=0 ; index<500000 ; index++) {
//CCriticalSection cs ;
cs.Lock() ;
cs.Unlock() ;
}
}
DWORD e_cs = et_cs.GetElapse() ;
ElapseTick et_me ;
{
CMutex mt ;
for (int index=0 ; index<500000 ; index++) {
mt.Lock() ;
mt.Unlock() ;
}
}
DWORD e_me = et_me.GetElapse() ;
ElapseTick et_pr ;
{
Profile profile ;
for (int index=0 ; index<500000 ; index++) {
int data = profile.GetInt(_T("Test"),_T("Test"),100) ;
}
}
DWORD e_pr = et_pr.GetElapse() ;
OpenMP エラー 1002
—————————
致命的なユーザー エラー 1002:
—————————
同一名の 1 つで ‘#pragma omp critical’ が不適切に入れ子にされています
2.9 ディレクティブの入れ子
局所的になる様に,呼び出し元での “#pragma omp critical” を削除.
class Profile { ... protected: LPCTSTR LastProfileName ; CString C_T_ProfileName ; ... } ; BOOL Profile::SaveProfileName(void) { CWinApp* app = AfxGetApp() ; if (app== NULL) { return FALSE ; } LastProfileName = AfxGetApp()->m_pszProfileName ; AfxGetApp()->m_pszProfileName = C_T_ProfileName ; return TRUE ; } BOOL Profile::LoadProfileName(void) { AfxGetApp()->m_pszProfileName = LastProfileName ; return TRUE ; }
omp critical ではなく,MFC 同期クラスを使用する様に変更.
// 以下は,テスト用のコード BOOL Profile::?et??? (LPCTSTR lpszSection,LPCTSTR lpszEntry,...) { ... CMutex m(FALSE,MN_LPN) ; m.Lock() ; // return ???Profile??? (lpszSection, lpszEntry, ...) ; BOOL ret = ???Profile??? (lpszSection, lpszEntry, ...) ; m.Unlock() ; return ret ; } // MFC 同期クラスの呼出しはコストがかからない様に修正する
MFC Static → DLL
MFC を「スタティック ライブラリ」から「共有 DLL」に変更した時,以下のエラーになることがある.
—— ビルド開始: プロジェクト: Project , 構成: Release Win32 ——
コンパイルしています…
StdAfx.cpp
C:Program FilesMicrosoft Visual Studio 8VCatlmfcincludeafx.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]
Project – エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
*.vcproj をエディタで開き,"$(NoInherit)" を削除.
2010/04/21 追記
—— ビルド開始: プロジェクト: Project , 構成: Release Win32 ——
StdAfx.cpp
C:Program Files (x86)Microsoft Visual Studio 10.0VCatlmfcincludeafxver_.h(81): fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
プロジェクトの「プロパティ」-「構成プロパティ」-「C/C++」-「コード生成」-「ランタイムライブラリ」
マルチスレッド (/MT) → マルチスレッド DLL (/MD)
2021/06
https://dev.mish.work/wordpress/2021/01/23/vc-12-lnk1104-vc14-2-lnk2019/
https://dev.mish.work/wordpress/2021/04/01/change-mfc-static-error/
FileVer.* を使用した CAboutDlg
CAboutDlg を表示する時に IDC_STATIC による固定的な情報を使用するのではなく,バージョンリソースを使用する
- IDD_ABOUTBOX の IDC_STATIC を IDC_FV_DESCRIPTION_VERSION と IDC_FV_LEGAL_COPYRIGHT に変更.
- IDC_FV_XXX で始まる使用できるものは,FileVer.cxx を参照.個別の12個と組合せの1個を用意 .
- CAboutDlg::OnInitDialog() で,SetAboutFileVer(this) を呼び出す.
- リンク時に Version.lib がなければ追加.
http://cid-535f5973454c1292.skydrive.live.com/embedicon.aspx/.Public/MFC/FileVer.zip
FileVer.zip
2022/07/28
::GetFileVersionInfo
FVersion.hxx
2024/07/29
VC 6 プロジェクトを公開.
Windows バージョンのデスクトップ表示
Windows のバージョンをデスクトップに表示する reg ファイル
http://cid-535f5973454c1292.skydrive.live.com/embedicon.aspx/.Public/RegFiles/PaintDesktopVersion.zip
PaintDesktopVersion.zip
HKEY_CURRENT_USER\Control Panel\Desktop
PaintDesktopVersion
IIS 他の PC から接続できない
以下を設定済み.
Windows ファイアウォールを設定したまま、IIS のサービス提供を有効にする方法
http://support.microsoft.com/kb/883877/ja
http://support.microsoft.com/ja-jp/help/883877
この状態で,他の PC から接続できない状態になっていた(前は接続できてたはず).
1. 一度,「詳細設定」-「サービス」タブの「Web サーバ(HTTP)」のチェックを外す.
2. 「Windows ファイアウォール」のダイアログを閉じる.
3. 再度開いて「「Web サーバ(HTTP)」のチェックを付ける.
再設定して他から接続できる様になった.
2016/04/19 追記 上は,Win XP 相当の内容です.
2015/02 IIS 環境の再設定
2020/11 Win10 他の PC が表示されない
「すべて…/このユーザのみ」の選択を表示させない
インストール時に,「すべてのユーザ」/「このユーザのみ」の選択を表示しない設定.
- メニューの「表示」-「エディタ」-「ユーザーインターフェイス」で設定ウィンドウを表示する.
- ツリーの「インストール」-「開始」-「インストールフォルダ」を選択.
- プロパティの「InstallAllUsersVisible」を Flase に.
必要に応じて,「配置プロジェクトのプロパティ」の「InstallAllUsers」を設定すること.
2021/11/17
メニューの「表示」-「Editor」-「ユーザー インターフェース」.
または「プロジェクト」-「右クリック」-「View」-「ユーザー インターフェース」.
「ツリー」の「Install」-「Start」-「インストール フォルダー」を選択.
プロパティの「InstallAllUsersVisible」を Flase に.
CommonAppDataFolder にインストールしたい
- 「特別なフォルダの追加」-「カスタムフォルダ」でフォルダを作成.
- プロパティの「DefaultLocation」を "[CommonAppDataFolder]" と入力.
[CommonAppDataFolder][Manufacturer][ProductName] などとしても良い.
System Folder Properties
http://msdn.microsoft.com/en-us/library/aa372057(VS.85).aspx
Outlook で配信不能になる
2018/04/06 新しく書き直し.
配信不能 : Subject
システム管理者
送信日時 2010/02/19(金) 21:20
宛先 **********
このメールは、受信者全員または一部に届きませんでした。
件名: Subject
送信日時: 2010/02/19 21:20
以下の受信者にメールを配信できません:
‘user@*******.com’ 2010/02/19 21:20
この受信者へ配信できる電子メール アカウントはありません。
受信者のメールアドレスを設定する時,_T("smtp:") を付加する.
// DOCMAPI.CPP CDocument::OnFileSendMail
//*******************************************************************************
// 関数名 :ファイルの送信
// 作成日 :’06/06/23
//*******************************************************************************
BOOL SendMail::Send (void) const
{
if (!IsSupport()) { return FALSE ; }
CheckSizeAlert() ;
// MultiByte の必要があるようなので,UNICODE の時のバッファをここに登録する
LateDelete ld ;
// 添付ファイルの準備
int fileCount = 0 ;
CArray<MapiFileDesc,MapiFileDesc> fileDescA ;
int index = 0 ;
for (index=0 ; index<PathNames.GetSize() ; index++) {
CString pathName = PathNames[index] ;
if (::FileIsNothing (pathName)) { continue ; }
if (::FileIsDirectory(pathName)) { continue ; }
MapiFileDesc fileDesc ;
memset(&fileDesc,0,sizeof(MapiFileDesc)) ;
fileDesc.nPosition = (ULONG)-1 ;
#ifdef _UNICODE
fileDesc.lpszPathName = SendMail__ChangeMultiByte(PathNames[index],&ld) ;
fileDesc.lpszFileName = SendMail__ChangeMultiByte(FileNames[index],&ld) ;
#else
fileDesc.lpszPathName = LPSTR(LPCTSTR(PathNames[index])) ;
fileDesc.lpszFileName = LPSTR(LPCTSTR(FileNames[index])) ;
#endif
fileDescA.Add(fileDesc) ;
fileCount++ ;
}
// 受信者の準備
int recipCount = 0 ;
CArray<MapiRecipDesc,MapiRecipDesc> recipDescA ;
CStringArray recipName ;
CStringArray recipAddr ;
for (index=0 ; index<Recipient.GetSize() ; index++) {
recipName.SetAtGrow(index,Recipient[index]) ;
recipAddr.SetAtGrow(index,Recipient[index]) ;
if (IsAddressAddSMTP()) {
recipAddr.SetAtGrow(index,_T("smtp:")+Recipient[index]) ;
}
}
for (index=0 ; index<Recipient.GetSize() ; index++) {
MapiRecipDesc recipDesc ;
memset(&recipDesc,0,sizeof(MapiRecipDesc)) ;
recipDesc.ulRecipClass = MAPI_TO ;
#ifdef _UNICODE
recipDesc.lpszName = SendMail__ChangeMultiByte(recipName[index],&ld) ;
recipDesc.lpszAddress = SendMail__ChangeMultiByte(recipAddr[index],&ld) ;
#else
recipDesc.lpszName = (LPSTR)((LPCTSTR)(recipName[index])) ;
recipDesc.lpszAddress = (LPSTR)((LPCTSTR)(recipAddr[index])) ;
#endif
recipDescA.Add(recipDesc) ;
recipCount++ ;
}
MapiMessage message ;
memset(&message,0,sizeof(message)) ;
message.nFileCount = fileCount ;
message.lpFiles = fileDescA.GetData() ;
message.nRecipCount = recipCount ;
message.lpRecips = recipDescA.GetData() ;
#ifdef _UNICODE
message.lpszSubject = SendMail__ChangeMultiByte(GetSubject(), &ld) ;
message.lpszNoteText = SendMail__ChangeMultiByte(GetNoteText(), &ld) ;
#else
message.lpszSubject = LPSTR(LPCTSTR(Subject)) ;
message.lpszNoteText = LPSTR(LPCTSTR(NoteText)) ;
#endif
CWnd* mainWnd = AfxGetMainWnd() ;
#if(_MFC_VER >= 0x0700)
ULONG_PTR hWnd = (ULONG_PTR)mainWnd->GetSafeHwnd() ;
#else
ULONG hWnd = (ULONG) mainWnd->GetSafeHwnd() ;
#endif
int nError = pSendMail(0, hWnd,&message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
if (nError != SUCCESS_SUCCESS &&
nError != MAPI_USER_ABORT &&
nError != MAPI_E_LOGIN_FAILURE) {
AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND) ;
Copy() ;
}
return TRUE ;
}
クリップボードへのテキストの転送
//*******************************************************************************
// 関数名 :クリップボードへのテキストの転送
// 作成日 :’01/07/13
// 変更日 :’07/12/14 UNICODE テキスト対応
//*******************************************************************************
inline
BOOL SetClipboardText (LPCTSTR text)
{
CString str = text ;
GLOBALHANDLE hGMemText = 0 ;
{
hGMemText = ::GlobalAlloc(GHND,(DWORD)(str.GetLength()+1)*sizeof(TCHAR)) ;
LPSTR lpText = (LPSTR)::GlobalLock(hGMemText) ;
memmove(lpText,str,str.GetLength()*sizeof(TCHAR)) ;
::GlobalUnlock(hGMemText) ;
}
{
BOOL ret = ::OpenClipboard(NULL) ;
if (ret == FALSE) {
::GlobalFree(hGMemText) ;
::MessageBeep(0) ;
::MessageBox(NULL,_T("ERROR: Cannot access the Clipboard!"),AfxGetAppName(),MB_OK|MB_ICONEXCLAMATION) ;
return FALSE ;
}
else {
::EmptyClipboard() ;
#ifdef _UNICODE
::SetClipboardData(CF_UNICODETEXT, hGMemText) ;
#else
::SetClipboardData(CF_TEXT, hGMemText) ;
#endif
::CloseClipboard() ;
}
}
return TRUE ;
}
Win7 が勝手に起動する
http://support.microsoft.com/default.aspx/kb/979878
2019/03/05 修正
Windows 7 ベースのコンピューターが予期せず毎日特定の時刻にスリープ状態から復帰する