読者です 読者をやめる 読者になる 読者になる

VC

意外と知らない?Visual Studio の「必ずインクルード」プロパティ

vc

Visual Studio でプリコンパイル済みヘッダーを有効にすると、 stdafx.h を最初にインクルードしないといけないのですが、 ソースファイルに書きたくない(書けない)場合の対処方法。ネタ元 http://srz-zumix.blogspot.jp/2012/10/visual-studio.html

c++ rest sdk使おうとして#include <cpprest/http_client.h>したらエラーになった時の対処法

vc

#include <cpprest/http_client.h> #include <cpprest/filestream.h> こうなった時はパスが通ってないだけ。 プロジェクトプロパティ - >構成プロパティ - > C / C ++ - >一般 - >追加インクルードディレクトリでこちらのパスを含める必要があります:C:\ YourProject \ packages \ cpprestsdk.v140.winde</cpprest/filestream.h></cpprest/http_client.h>…

DLLのエントリ(関数)を確認するには dumpbin

vc

コマンドプロンプトでは使えません。VisualStudio コマンドプロンプトから使います。 dumpbin /exports HelloWorld.dll ネタ元 http://replication.hatenablog.com/entry/2014/05/02/101020

Visual C++でのDLLの一般的な作成方法(暗黙的リンク)

VC

けっこうめんどい。 ネタ元 http://fa11enprince.hatenablog.com/entry/2014/06/20/015808

WinINet(InternetReadFile)によるファイル(HTMLも含む)のダウンロード

vc

int Web_Downloader(char *Server_Host_Address, char *FileLocation, char *Referer , char *SaveDirectory , char *SaveName ) { //返り値一覧 // //-106:ERR_INTERNET_DISCONNECTED インターネットに接続されていない。 //-403:"403 Forbidden" サーバー…

ShiftJisとUTF8間のコード変換(VC++)

VC

char* szShiftJis = "雨にも負けず、風にも負けず。"; char bufUTF8[MAX_PATH]; char bufShiftJis[MAX_PATH]; void ShiftJisToUTF8() { wchar_t bufUnicode[MAX_PATH]; // まずUniocdeに変換する // サイズを計算する int iLenUnicode = MultiByteToWideChar…

WebBrowser コントロールで使われている Internet Explorerを最新のバージョンに変更する

VC VB

WebBrowserコントロールを利用した場合、デフォルトの状態ではWebBrowserコントロールはInternet Explorer 7。 バージョンを変更するにはレジストリをイジる必要がある。場所は \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureContr…

いちいち再コンパイルされてしまう時の原因

vc

ファイルの日付が未来のが混じってるはず。探してみて。ネタ元 https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/c9b528b8-8993-4ba3-9735-b9caff936e12?forum=vcgeneralja

HWND←→CWndの変換

VC

// HWND→CWnd* CWnd* pCWnd = CWnd::FromHandle( hwnd ); // CWnd*→HWND HWND hwnd = pCWnd->GetSafeHwnd();ネタ元 http://d.hatena.ne.jp/octech/20070224/1172312355

MFCで一番簡単なマウス砂時計にする方法

宣言するだけ CWaitCursor wc;関数やスコープ抜けるところで元に戻る 簡単。ネタ元 http://park1.wakwak.com/~ima/visualcpp_tips0006.html

一番簡単な外部プログラムの実行

vc

ShellExecute(NULL,_T("open"),_T("実行したいexeのフルパス"),NULL,NULL,SW_SHOW);ネタ元 http://technologicaladvance.blog.fc2.com/blog-entry-61.html

BSTR 覚え書き

VC

消えると困るのでコピペ コピペ元 http://www2.wbs.ne.jp/~kanegon/doc/bstr.txt BSTR 覚え書き 2002.2.19 kanegon create 2002.2.23 kanegon update BSTR は見かけ上(Windowsヘッダ上)、LPOLESTR と等しい。 typedef WCHAR OLECHAR; // ※ typedef OLECHAR _…

ATLとMFCの併用

vc

MFCとATLを共用するにはコツがいる。 ネタ元 Visual C の ATL プロジェクトに MFC サポートを追加する方法 MFC プロジェクトへの ATL サポートの追加 ATL プロジェクトでの MFC のサポート

ディレクトリ(フォルダ)をコピーする

実装方法としては、 ・ディレクトリの中のファイルをコピーする処理を作成する方法 ・シェル関数を用いる方法 の2つの実現実装方法があります。API版 BOOL CopyDirectory( LPCTSTR lpExistingDirectoryName, LPCTSTR lpNewDirectoryName ) { // 入力値チェ…

(C++)現在のログインしてるユーザ名を取得する

Windows API の GetUserName関数 を使えばいいようです。 //現在のユーザ名取得 TCHAR user[1024]; DWORD dwUserSize; // 取得したユーザ名の文字列の長さ if ( ! GetUserName(user,&dwUserSize) ){ return -1; } MessageBox(NULL,user,_T("ユーザ名"),MB_OK…

メモリマップドファイルのサイズ変更のつもりでCloseHandle()してからCreateFileMappingしても同じ名前じゃ意味が無い

名前変えないと、結局前作ったハンドルが返ってくる。サイズも変わってない。プロセスを落とすまでそうなるらしい。 ひょっとして、同じ名前(今回の場合は、"MAPFILE")で 異なるサイズのオブジェクトを作成しようとしたりしていませんか?ネタ元 http://hp…

ファイルまたはフォルダの移動およびリネーム

VC

BOOL MoveFile( LPCTSTR lpszOld, LPCTSTR lpszNew ) LPCTSTR lpszOld; // 移動/リネームするファイルのアドレス LPCTSTR lpszNew; // 移動/リネーム後のファイルのアドレス // 引数の設定 lpszOld = _T("C:\\sample.txt"); lpszNew = _T("C:\\test.txt");…

パラメータを受け取るラムダ式を受け取るメンバ関数の実装例

VC

…って作った後に参照キャプチャ/コピーキャプチャの存在を知った。 意味ない努力したけどメモ代わりに書いておく。 // ラムダ式受け取る側 #include <functional> ... BOOL Choge::CallFunc(std::function<BOOL(void*)> func,void* p_param){ .... //関数コール BOOL result = func(p_</bool(void*)></functional>…

DEP(Data Execution Prevention:データ実行防止)で実行停止の問題回避方法

VC

リンカ設定の詳細で データ実行防止(DEP)で「いいえ」を選択する。ネタ元 http://www.mitsubishielectric.co.jp/fa/document/technews/plc/fa-d-0051/fad0051d.pdf

.NET Visual Studio Installerを使ったインストーラの作成

VC

基本的な流れ http://computer.shipweb.jp/soft/dotnettips_wininst.htm DLLをCOM登録するにはプロパティでvsdrfCOMSelfReg指定。 http://www.freeml.com/msi/2028/latest マネージドDLLはvsdrfCOMじゃないとエラーになったよ。そういうもの? 作成されるシ…

WindowsVista以降だとCreateFileMapping()でGlobalのプレフィックスを付けた名前で共有メモリは作成できない

VC

うーむ。そうなのか・・・ WindowsVistaだと、管理者権限のないユーザーでログインしてWindowsアプリケーション を起動すると、CreateFileMapping関数がERROR_ACCESS_DENIED(アクセス拒否)で失敗し ます。 管理者権限のないユーザーでログインしていると、…

GetLastError() のエラーリスト

VC

ネタ元 http://ir9.jp/prog/ayu/win32err.htm

CMapを高速に使うためには

初期サイズを定義する SetAtではなく[]を使う 不得意分野では使わない 単純にすべてを羅列するような使い方の場合はCMapではなく、CArrayなどを検討したほうがいいです。 ネタ元 http://www.mfc-programming.com/2010/etc/mfc248.html

CMAPの定義例

CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;この例は MY_STRUCT 値を格納し、 int のキーにアクセスし、参照によって MY_STRUCT のアクセスされた項目を返します。 CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;この例では CPerson 値を格納し…

VC++でVBのDoEvents関数

VC

MSG msg; if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } }ネタ元 http://www.softist.com/programming/doevents/doevents.htm http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+20…

MFCでファイルの更新日付取得

[vc][mfc] CFileFind find; if(find.FindFile(tmpFilepath)) { find.FindNextFile(); CTime updateTime; find.GetLastWriteTime(updateTime); find.Close(); } ネタ元 http://oissu2.blog77.fc2.com/blog-entry-28.html

グローバルミューテックス

VC

[VC]そのコンピュータで唯一の資源をアクセスするための排他には"Global\\"をつけたグローバルミューテックスにする必要がある。 ミューテックスの名前としてアプリケーション固有の名前を指定する。 その際、その名前の先頭に「Global\」というプレフィック…

C++からVB.NET DLLの関数にDate型で値を渡すならCOleDateTimeを使う

[VC][VB][COM]どうも内部はdoubleの値となっているようで、それを渡せればOKみたい。 #include "ATLComTime.h" … DISPPARAMS params; ::memset(&params, 0, sizeof(DISPPARAMS)); params.cNamedArgs = 0; params.rgdispidNamedArgs = NULL; params.cArgs = 1…

Visual Studio 2013のインストールWin7でできなかったら、こっちからどうぞ

VC

最初 Win8.1PCにインストールしたので気が付かなかったが、Win7では制限がかかることがあるらしい。 Windows 7にVS2013をインストールしようとして軽くはまる こっちからダウンロードしたやつならWin7PCでも問題なかったよ。http://www.microsoft.com/ja-jp/…

BSTRからC文字列への変換

// BSTR to C String BSTR bstrStart; bstrStart = GetBSTR(); TCHAR szFinal[255]; // direct conversion from BSTR to LPCTSTR only works // in Unicode _stprintf(szFinal, _T("%s"), (LPCTSTR)bstrStart); AfxMessageBox(szFinal); _bstr_t bstrInterme…

マネージドDLL(.NETのクラスライブラリ)をC言語やC++から呼ぶ場合

VC VB

消えると困るのでコピペ コピペ元 http://satoshi.web5.jp/memo/connect_dll.htm##2 ======================================== VB.NET DLL側のプログラム プロジェクト名は vb_dllでクラスライブラリ作成( vb_dll.dllがビルドされる )プロジェクト → vb_d…

COM。MFCとVB.NETで作ったDLLでの文字列のやりとりにはBSTR

VC VB

メモ書きです。 BSTRか・・・呼び出し側がSysAllocString()で領域確保 DLLの関数側でセットして返す、なんて使い方。最後には呼び出し側がSysFreeString()する必要あるよ http://msdn.microsoft.com/ja-jp/library/xda6xzx7(v=vs.90).aspx http://www2.wbs.n…

気持ち悪いぐらい安いVisualStudio2013

VC

なんかMicrosoft Visual Studio 2013 Professional 日本語版が15,800円とかなんですけど…。 http://www.dlsoft.info/index.php?route=product/product&keyword=visual&product_id=139 お値段の秘密はこちら。 http://www.dlsoft.info/index.php?route=inform…

日付的文字列をCTimeに変換する簡単な方法

VC

[vc] const CString strDate = _T("2011/02/01 00:00:00"); COleDateTime oleTime; oleTime.ParseDateTime(strDate);これで oleTime に結果が入る。この COleDateTime は CTime にそのまま代入可能。 ネタ元 http://sphere42.mlexp.com/techlib/2011/02/vc.h…

マルチスレッドの場合はCoInitializeとCoUninitializeのペアを繰り返し呼んではならない。最初にCoInitializeしたら、プロセス終了時にCoUninitializeするまで触らないこと

[VC][開発] よくサンプルで CoInitializeとCoUninitializeで処理を挟んだサンプルがあるが、プロセスの最初と最後に呼ぶだけでいいらしい。特にマルチスレッドの場合は要注意なのだそうだ。 ネタ元 プログラム終了時にCOMが消えずにメモリリークする

OutputDebugStringはリリースビルド時に呼び出し削除されない

vc

こんな感じで工夫失いと消せない。 #ifndef _DEBUG #define OutputDebugStringA(x) ((void)0) #define OutputDebugStringW(x) ((void)0) #endif ネタ元 http://blogs.konuma.org/blog/2010/06/outputdebugstri/

コントロールキーの押下状態を知るにはGetKeyState()

vc

こんな感じ if ((GetKeyState(VK_CONTROL) & 0x8000)) { TRACE("ctrlキー押下!\r\n"); } else { TRACE("ctrlキー押下しない!\r\n"); }ネタ元 http://www.softist.com/programming/keystate/keystate.htm

VisualStudioで32bitアプリで2G以上のメモリを使うオプションの設定方法

vc

[vc] 32bitアプリケーション(プロセス)の仮想メモリ使用量は、通常2GBだけど/LARGEADDRESSAWARE オプションで 32bitOS上では、LARGEADDRESSAWAREモードにより、1:3にすることができるため、上限が3GBにできる。 64bitOS上では、LARGEADDRESSAWAREモードに…

C#で作成したクラスライブラリ(DLL)をMFCで利用する

[C#][VC][MFC]消えると困るのでコピペ MFC/C# – C#で作成したクラスライブラリをMFCで利用する 基本 COMを利用してMFCからC#のクラスを利用する C#側 [準備] 1.プロジェクトプロパティ>ビルド 「COM相互運用機能の登録」にチェックを入れる ※自分でregasmを…

実行ファイルのアイコンの変更するにはico上書き

vc

[vc]アイコンファイル(*.ico)をつくって、もとあるやつに上書きするiconは256x256,48x48,16x16で32bitのPNGの絵を@icon変換とかでicoファイルにする。フリーのicoはhttp://icones.pro/とかでも拾えるよ ネタ元 http://sorceryforce.com/visualstudio/execute…

スプラッシュウィンドウを表示してプログラムを起動する (VC++) サンプル

VC

[VC]検索するとサイトが死んでいるがキャッシュで生きてるページがあったのでメモ スプラッシュウィンドウを表示してプログラムを起動する (VC++) 実行モジュール (サンプル設定ファイル等付き) (Bootup.zip) (978 KB) ソース (Bootup.project.zip) (231 KB)

メモリリークを調べる関数 _CrtSetDbgFlag

VC

[VC]普通にデバッグモードで実行すれば、こんな定義しなくても勝手にメモリリーク教えてくれるような・・・。おれの知らないところでだれかがなにか細工してくれているのかな? フラグ 説明 _CRTDBG_ALLOC_MEM_DF デバッグ用のヒープメモリが使われるように…

WinInet を使ってフォームの POST 要求をシミュレートする方法

MFC WinInet クラスを使用する場合 CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // URL-encoded form variables - // name = "John Doe", userid = "hithere", other = "P&Q" CString strFormData = _T("name=John+Doe&us…

ダイアログ(CDialog)の返り値指定にはEndDialog()

[vc][mfc]EndDialog(1);ってやると、1が返るようになる ネタ元 http://www.crimson-systems.com/tips/t037g.htm

CStringListとstl::vectorを使っているコードがあるとC2248がでることがある

vc

[vc]CStringListを含んだ構造体を関数に間違って値渡しで渡すとC2248になることがある。ポインタか参照渡しにすれば出なくなった。 なんだかよくわからないがSTL使うとVCのバージョンアップの時に色々不幸が多いみたい。 なるべく使わないほうが楽に生きられ…

CreateDirectory()エラー時の詳細チェック方法(既にフォルダが存在する、など)

[vc][mfc]GetLastError()とInternetGetLastResponseInfo()を使うFTPサーバからのレスポンスがInternetGetLastResponseInfoで受け取る文字列に入るみたい if( !m_ftpConP->CreateDirectory(dirName) ){ long error_code = GetLastError(); if( error_code == …

CFileFindでファイルの存在チェック

[vc][mfc]ファイル単体の存在チェック CFileFind find; CString filePath = _T("C:\\foo.bar"); if( find.FindFile( filePath ) ){ // ファイルが存在 }フォルダ内ファイルの存在チェック 以下の例ではでファイル名の条件を指定。 CFileFind find; CString d…

GetFtpConnection()で12014のエラーとなったら、なにか接続の設定がおかしい

[vc][mfc]引数の前後にスペースが混じっちゃってるとか、イージーミスの可能性大。 FTPの環境設定に誤りがあると考えられます。以下を確認してください。 FTPアカウント 性能情報出力画面のFTP環境設定により、運用管理サーバに登録されたアカウントが正しく…

FTPクライアントをMFCで作るなら CInternetSession CFtpConnection

[vc][mfc]メモ 典型的な FTP クライアント アプリケーションの作成手順 FTPクライアントを作る1 ↑開放処理が抜けてるコードなので注意。後始末はこうやる必要があるよ。 if (m_ftpConP){ m_ftpConP->Close(); delete m_ftpConP; m_ftpConP = NULL; } if (m_…

Visual C++インラインアセンブラをx64に移植する

vc

Visual C++ x64版ではインラインアセンブラが使えません。64bit化するにはインラインアセンブラの部分をなんとかしないといけません。 以下メモvc x64 インラインアセンブラ http://www.officedaytime.com/tips/asm64/