何回もやっちゃったので、一応ノートを書いておきます。
MSDN:
MultiByteToWideChar()
WideCharToMultiByte()
使う例:
char before[]="変換前";
WCHAR wcAfter[1024];
char mbAfter[1024];
MultiByteToWideChar(CP_UTF8, NULL, before, -1, wcAfter, 0);
WideCharToMultiByte(CP_UTF8, NULL, wcAfter, -1, mbAfter, 0, NULL, NULL);
一般の文字列の場合、TEXT("使いたい文字")を使ったほうが便利かも。
どうやら、WideCharToMultiByteの場合がやや面倒くさい。
SyntaxHighlighter
2010-09-22
Windows Vista以降のプログラム注意点
なんか面倒くさいことになりました。
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
とりあえずWTSSendMessage()を使って何とかしようかなぁ
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
とりあえずWTSSendMessage()を使って何とかしようかなぁ
2010-09-16
深入淺出MFC 2e 學習筆記: 第一章Generic
以下是自己在Windows 7中的Visual Studio 2008下編譯Generic所遇到的問題與解決方案
Generic.mak:
這個檔案年代已經久遠, 當中所使用之某些編譯工具在現在最新的vs2008已經不再提供 (如rc),所以放棄不用...
Generic.h(書中code)。有稍加修改
Generic.cpp(書中為.c)
Generic.rc(書中code)。以VS產生之原始檔, 最後加入書中code
resource.h 原本應該是rc根據generic.rc生成。但是VS笨笨的,所以還是自己修改吧
VS2008,打開一個新的win32程式用新專案,內容用空白
自己把上面這幾個檔案加入/修改之後就能編譯了
理論上,加入generic.rc的時候,resource.h檔案就會被自動生成,可是內容就點點點了
如果編譯出現囉嗦的字眼之類的,應該是編碼問題
把專案的編碼從UNICODE(預設)改成用多字元編碼就沒事了
Generic.mak:
這個檔案年代已經久遠,
Generic.h(書中code)。有稍加修改
BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
Generic.cpp(書中為.c)
#include <windows.h> #include "resource.h" #include "generic.h" HINSTANCE _hInst; HWND _hWnd; char _szAppName[] = "Generic"; char _szTitle[] = "Generic Sample Application"; int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; UNREFERENCED_PARAMETER(lpCmdLine); if(!hPrevInstance) if(!InitApplication(hInstance) ) return (FALSE); if(!InitInstance(hInstance, nCmdShow)) return (FALSE); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_ BRUSH); wc.lpszMenuName = "GenericMenu"; wc.lpszClassName = _szAppName; return (RegisterClass(&wc)); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { _hInst = hInstance; _hWnd = CreateWindow( _szAppName, _szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if(!_hWnd) return (FALSE); ShowWindow(_hWnd, nCmdShow); UpdateWindow(_hWnd); return (TRUE); } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch(message){ case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(wmId){ case IDM_ABOUT: DialogBox(_hInst, "AboutBox", hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); } LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam) ; switch(message){ case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, TRUE); return (TRUE); } break; } return (FALSE); }
Generic.rc(書中code)。以VS產生之原始檔,
// Microsoft Visual C++ で生成されたリソース スクリプトです。 // #include "windows.h" // 增加這行 #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS //////////////////////////////////////////////////////////// ///////////////// // // TEXTINCLUDE 2 リソースから生成されました。 // #include "afxres.h" ////////////////////////////// ////////////////////////////// ///////////////// #undef APSTUDIO_READONLY_SYMBOLS ////////////////////////////// ////////////////////////////// ///////////////// // 英語 (米国) リソース #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) LANGUAGE 17, 1 #pragma code_page(932) #ifdef APSTUDIO_INVOKED ////////////////////////////// ////////////////////////////// ///////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // 英語 (米国) リソース ////////////////////////////// ////////////////////////////// ///////////////// #ifndef APSTUDIO_INVOKED ////////////////////////////// ////////////////////////////// ///////////////// // // TEXTINCLUDE 3 リソースから生成されました。 // ////////////////////////////// ////////////////////////////// ///////////////// #endif // APSTUDIO_INVOKED でない場合 // 以下為自己加入 GenericMenu MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New", IDM_NEW, GRAYED MENUITEM "&Open...", IDM_OPEN, GRAYED MENUITEM "&Save", IDM_SAVE, GRAYED MENUITEM "Save &As...", IDM_SAVEAS, GRAYED MENUITEM SEPARATOR MENUITEM "&Print...", IDM_PRINT, GRAYED MENUITEM "P&rint Setup...", IDM_PRINTSETUP, GRAYED MENUITEM SEPARATOR MENUITEM "E&xit", IDM_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", IDM_UNDO, GRAYED MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", IDM_CUT, GRAYED MENUITEM "&Copy\tCtrl+C", IDM_COPY, GRAYED MENUITEM "&Paste\tCtrl+V", IDM_PASTE, GRAYED MENUITEM "Paste &Link", IDM_LINK, GRAYED MENUITEM SEPARATOR MENUITEM "Lin&ks...", IDM_LINKS, GRAYED END POPUP "&Help" BEGIN MENUITEM "&Contents", IDM_HELPCONTENTS, GRAYED MENUITEM "&Search for Help on...", IDM_HELPSEARCH, GRAYED MENUITEM "&How to Use Help", IDM_HELPHELP, GRAYED MENUITEM SEPARATOR MENUITEM "&About Generic...", IDM_ABOUT END END AboutBox DIALOG DISCARDABLE 22, 17, 144, 75 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "About Generic" BEGIN CTEXT "Windows 95", -1, 0, 5, 144, 8 CTEXT "Generic Application", -1, 0, 14, 144, 8 CTEXT "Version 1.0", -1, 0, 34, 144, 8 DEFPUSHBUTTON "OK", IDOK, 53, 59, 32, 14, WS_GROUP END
resource.h 原本應該是rc根據generic.rc生成。但是VS笨笨的,所以還是自己修改吧
//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by generic.rc // 自己加入部分START #define IDM_NEW 201 #define IDM_OPEN 202 #define IDM_SAVE 203 #define IDM_SAVEAS 204 #define IDM_PRINT 205 #define IDM_PRINTSETUP 206 #define IDM_EXIT 207 #define IDM_UNDO 208 #define IDM_CUT 209 #define IDM_COPY 210 #define IDM_PASTE 211 #define IDM_LINK 212 #define IDM_LINKS 213 #define IDM_HELPCONTENTS 214 #define IDM_HELPSEARCH 215 #define IDM_HELPHELP 216 #define IDM_ABOUT 217 //#define IDOK 300 //#define IDCANCEL 301 // 自己加入部分END // 新しいオブジェクトの次の既定値 // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
VS2008,打開一個新的win32程式用新專案,內容用空白
自己把上面這幾個檔案加入/修改之後就能編譯了
理論上,加入generic.rc的時候,resource.h檔案就會被自動生成,可是內容就點點點了
如果編譯出現囉嗦的字眼之類的,應該是編碼問題
把專案的編碼從UNICODE(預設)改成用多字元編碼就沒事了
2010-09-09
Windows 32bit プログラムを 64bit用に変更するときの注意点。
x64環境のSDKを使ってコンパイルするときに、GWL_WNDPROCなどシステムの定数が使えないことになります。
それは、SDKでは、x64環境であれば(#ifdef _win64)、それらの変数の定義をキャンセルした(undef)のです。
解決法として、GWL_WNDPROCを使った関数(GetWindowLong()/SetWindowLong())などをポインタを使うように変わること。
GetWindowLong() -> GetWindowLongPtr()
そして、GWL_WNDPROC -> GWLP_WNDPROC
としたら、x64環境でも無事に使えるようになります
もし同じコードを32bit環境での実行に心配を持つなら、
#ifdef _win64
// 64bitコード
#else
// 32bitコード
Credential Provider
Windows Vista 以降ログイン画面をカストマイズしたい場合いじるプログラムである。
しかし、何かの原因で、Microsoft自分が最初にリリースしたサンプルプログラムのBETAにはバッグが隠れている。それはSimpleHardwareEventCredentialProviderの中のMessageCredential.hにある。そのファイルの最後にあるSFI_NUM_FIELDSをSMFI_NUM_FIELDSに訂正しないと、64bitのOSで実行すると、メモリアクセスエラーになって、LogonUIがクラッシュすることが起こってしまう。そのバッグはFinalリリースに修正されたが、万が一BETAを基づいて作ったプログラムであれば、見直したほうがいいと思う。
結構悩ませたので、ここに記入して置く。
誰かの助けになるといいと思う。
しかし、何かの原因で、Microsoft自分が最初にリリースしたサンプルプログラムのBETAにはバッグが隠れている。それはSimpleHardwareEventCredentialProviderの中のMessageCredential.hにある。そのファイルの最後にあるSFI_NUM_FIELDSをSMFI_NUM_FIELDSに訂正しないと、64bitのOSで実行すると、メモリアクセスエラーになって、LogonUIがクラッシュすることが起こってしまう。そのバッグはFinalリリースに修正されたが、万が一BETAを基づいて作ったプログラムであれば、見直したほうがいいと思う。
結構悩ませたので、ここに記入して置く。
誰かの助けになるといいと思う。
keyword: Credential Provider, 64bit
2010-09-07
NS-3
最終的にNS-2が廃棄されるので、
今とこで、NS-3のドキュメントを読みながら訳しています
時間があれば、ここに拙者の訳を置きます
今とこで、NS-3のドキュメントを読みながら訳しています
時間があれば、ここに拙者の訳を置きます
最初の作品はns本部のdev版のチュートリアルhttp://www.nsnam.org/docs/tutorial.htmlに沿って訳していきます
前後矛盾だらけの訳になれないように頑張ります
では
32bit & 64bit programming
If u make a program that can run on a 32-bit OS, in most case, all u
have to do is rebuild it for 64-bit environment.
have to do is rebuild it for 64-bit environment.
u can compile a 64-bit program on 32-bit environment. All u have to do
is get the compiler and Libraries for 64-bit program.
Some of the 32-bit programs cannot run corrently on 64-bit OS, so u
have to rebuild(recomile) it for running on 64-bit OS.
Good luck, anyway.
登録:
投稿 (Atom)
人気の投稿
-
指令/英文 翻譯1 翻譯2 2D Solid 二維實體 2D 實面 2D Wireframe 二維線框 3D Array 三維陣列 3D 陣列 3D Dynamic View 三維動態觀察 3D 動態檢視 3d objects 三維物體 3D 物件 3D Orbit...
-
ノート程度: 線の太さを画面に反映させる Win: ツール>オプション でオプションウィンドを開き 作図スタイル>アクティブな作図スタイル>線のフォント で [ グラフィック領域で太さを表示]にチェックを入れる。 Mac: System Menu → 設定 /...
-
☆日本一 子煩悩な県 問題: 1.休日はたいてい子どもと遊ぶ 2.配偶者より子どもが大事である 3.外食するときは、まず子どもに何を食べたいか聞く 4.携帯の待ち受けは子どもの写真だ 5.子どもの寝顔を見て感動のあまり泣いたことがある ランキング 1.熊本県 2.北海道 3.山...
-
日本で結婚するときに、台湾の戸籍謄本の訳本が要る。 検索したら、いろいろ有用な先人たちの情報があります。 I♥TAIWAN - 日本小雪さんのブログ、最初ここからスタートして多分いちばん間違いなし。 在日台灣太太連絡簿 - 最低限の必要単語が載っている。 梅と桜 ...
-
這東西搞了兩個多禮拜,終於讓我找到合理的計算方式。 真圓度的計算方法,若使用半徑法,目前有 4種方式(參考Wikipedia(en)資料) 去取假想圓中心。 1. 最小區域圓法 Minimum Zone circle (MZC) 這是ISO及JIS B0621有規定的正式...
-
AutoCADではボタンで1クリック切り替えですけどね DraftSightではややめんどくさい 印刷シート(シートタブ)内で、全空間(モデルタブ)の特定の場所だけ出力させたい時に、ペーパー空間(シート ワークスペース)よりモデル空間(モデル ワークスペース)へ切り替える必...
-
第一關,...沒啥好寫的簡單 右鍵找出網頁原始碼之後就會看到密碼了 h4x0r ...NEXT
-
x64環境のSDKを使ってコンパイルするときに、GWL_WNDPROCなどシステムの定数が使えないことになります。 それは、SDKでは、x64環境であれば(#ifdef _win64)、それらの変数の定義をキャンセルした(undef)のです。 解決法として、GWL_WNDPROC...
-
大多數人使用iReport生成都會使用SQL來抓取資料庫檔案,但是iReport畢竟只是個設計表單用的程式,資料還是要靠Java餵給他。 一般的使用法,就像我以前做的 1. 在iReport中寫死SQL查詢句( SELECT xxx FROM yyy WHERE zzz )...
-
Access 2010の環境で開発する際、新しいファイル(ACCDB)は古いAccessでは使えないため、旧形式のMDBファイルに変換する必要性がある。 但し、変換されたファイルに、VBAコードはうまく変換できない/VBAコードが削除されることが多々ある。 故に、次のステッ...