VC

ダイアログ(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…

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/

序数を割り当てないでください。というワーニングが出たら .defファイルの @1 とかを削ればOK

VC

序数とは関数に割り付ける番号のようなもの。 LIBRARY mydll EXPORTS Swap @1昔はこっち使ったほうが高速とかいう噂があったけど、 MSDNに「上記の関数は常に名前で参照されるため、序数は不要」と記述があるそうで。 ただ、序数を指定していても実行時にエ…

VCRTDServer::ConnectData()の引数Stringsから引数を得る方法

VC

SAFEARRAYという型なので、SafeArrayGetElement()という関数を使ってアクセスする ::SafeArrayLock( *Strings ); VARIANT data; long i=0; HRESULT res = SafeArrayGetElement(*Strings,&i,( void* )&data); ::SafeArrayUnlock( *Strings );ネタ元 http://ma…

strtok_s()の使い方

VC

最後の引数が意味不明だったけど、とりあえず使えるようになった #include <stdio.h> #include <string.h> #ifndef null_ptr #define null_ptr 0 #endif char str[] ="asdc,fghm jkl;";//分割したい文字列 char *delim = ", ";//デリミタ(複数渡せる)ここではカンマと空白 cha</string.h></stdio.h>…

BSTR を char に変換するなら WideCharToMultiByte()

VC

//BSTR を char に変換---------------------------------------------- char buf2[64]=""; WideCharToMultiByte( CP_ACP, // コードページ ANSI コードページ 0, // 処理速度とマッピング方法を決定するフラグ (OLECHAR*)bstr, // ワイド文字列のアドレス -…

DLLをコンパイルして「_DLLMain@12はすでに定義されています」と言われたら、リンクの順序を変えてあげよう

VC

http://d.hatena.ne.jp/TEMPO/?of=5こちらの例では プロジェクト->プロパティ->構成プロパティ->リンカ->入力->特定のライブラリの無視のところに「mfcs71d.lib;msvcrtd.lib」 追加の依存ファイルのところに「mfcs71d.lib;msvcrtd.lib」 と設定してリンクの…

マイクロソフトの技術サポート窓口

VC

https://support.microsoft.com/select/?target=assistance&ln=ja

ATLやMFCを使わずに、Visual Studio 2008上でDLL形式のCOMを作成する方法

VC

COMのお勉強用にどうぞ。http://cx5software.com/article_com/

IDLファイルをコンパイルしてできるファイル*_i.cpp / *._p.cpp / *._i.h の解説

VC

ファイル 説明 sample_h.h インターフェースが定義されている。 sample_p.c インターフェースのリモートアクセスを可能にするためのマーシャリングコードを含み、プロキシ/スタブの役 割を果たす。 sample_i.c IIDやCLSIDの実体が定義されている。 sample.tl…

ATL/WTLに関する基礎知識

VC

COMの話はないけど、基礎を知れるhttp://urabes.jp/

COMの勉強なら「連載! とことん VC++」

VC

http://technet.microsoft.com/ja-jp/subscriptions/hh146885.aspx日本語で丁寧に解説されている

Regsvr32.exeでDLL登録しようとして「DllRegisterServer への呼び出しはエラーコード 0x8002801c により失敗しました。」と言われたら、管理者権限がないのが原因です

VC

管理者権限のコマンドプロンプトから実行すれば問題なし ネタ元 http://pasofaq.jp/windows/command/0x8002801c.htm

「Visual C++ で Excel 2002 またはそれ以降のバージョンの Excel 用の RealTimeData サーバーを作成します。」のサンプルをVC++2010で動かす方法

VC

VC http://support.microsoft.com/kb/327215/ja こちらにあるサンプルはVC++6.0用で、このまま変換してもビルドが通らない。ソリューションエクスプローラーからIRTDServer.idlを右クリック>プロパティを開き、ヘッダーファイルを %(Filename).h タイプライ…

サンプルのcalcdrivが動かないときはmfccalcをビルド&mfccalc.regをダブルクリックで登録しよう

vc

レジストリに登録しないと、呼び出せないのです

ウィザードで作ったATLのプロジェクトで、COM(OLE)サーバーを登録するには .rgsファイルにレジストリのスクリプトを書く

VC

うまくいった例 ATL.Test = s 'ATL Test Class' { CLSID = s '{14805E34-39E8-4FE4-9C3A-B5227C4B8C14}' } NoRemove CLSID { ForceRemove {14805E34-39E8-4FE4-9C3A-B5227C4B8C14} = s 'ATL Test Class' { ProgID = s 'ATL.Test' InprocServer32 = s '%MODUL…

Visual Studio 2010 のコード サンプル

VC

http://msdn.microsoft.com/ja-jp/vstudio/dd238515.aspx

ビルドで「このコマンドを実行するための十分な権限があるか確認してください」と言われたらVC++を管理者権限で起動するべし

VC

ネタ元 http://iwaoalles.wordpress.com/2010/05/07/mfc-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%81%AE%E7%99%BB%E9%8C%B2/

OLEサーバーなソフトを作る調査

VC

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43441&forum=7 http://msdn.microsoft.com/ja-jp/library/8c47csfz(v=vs.80).aspx http://eternalwindows.jp/ole/oleembedded/oleembedded06.html

WCHARからchar文字列に変換ならwcstombs_s()

VC

char tmpWorkbookName[256]; int len; size_t ReturnValue; setlocale( LC_CTYPE, "Japanese_Japan.932" ); // コードページ 932 (SJIS) len = wcstombs_s( &ReturnValue,tmpWorkbookName, sWorkbookName.GetBuffer(0), 256 );

カスタムイベント(メッセージ)を追加

VC

クラスウィザードを開いて、ウィンドウのあるクラスを選び、「メッセージ」タブの一番下にある「カスタムメッセージの追加」でWM_????メッセージを追加できるちなみに WM_???? は自動的に追記されないので手動で登録する必要あり。その際はWM_USERを起点にし…

COMを使うときはCoInitialize(NULL) / CoUninitialize() を忘れないように

VC

OLEとかでなんかうまくいかないなぁと思ったら、コレが原因かも ネタ元 http://support.microsoft.com/kb/216686/ja http://program.station.ez-net.jp/memorandum/VC/7/com-create.asp

OLEのExcel操作で、セルの中の表示されている値が欲しければget_Text() / 式が欲しければget_Formula()を使う

VC

CRange Cells = Worksheet.get_Cells(); CRange Cell = Cells.get_Item(COleVariant((long)lCellRow), COleVariant((long)lCellColumn)).pdispVal; CString str = Cell.get_Text().bstrVal; CString str2 = Cell.get_Formula().bstrVal; Cell.put_Value2(COl…

共有セクション(共有メモリ)を使ってなぜか共有出来ないときは、初期化漏れ

VC

初期化していないグローバル変数は自動的に0に初期化されることになっているわけだけど、 このためにBSSという専用のセクションが用意されていて、スタートアップルーチンでクリア処理が走る。 そのため、初期化をしていない変数はせっかく用意した共有用の…

開いているExcelをVC++からコントロールするにはAttachDispatch() OLE

VC

サンプル CApplication App; CLSID clsid; LPDISPATCH pDisp; LPUNKNOWN pUnk; COleVariant varnull; // 既存のExcelのオブジェクトを取得 ::CLSIDFromProgID(_T("Excel.Application"), &clsid); if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK) { pUnk-…