COM
OleAuto.hに定義がある VARIANT variant; VARIANT *pV = &variant; V_VT(pV) = VT_I4; V_I4(pV) = 100;って感じ。直接メンバ変数に設定するよりわかり易くなる。 VT_I4のときはどのメンバに設定するかすぐわかんないでしょ?ネタ元 http://stackoverflow.com…
VARIANT 型を受け取る際の注意VARIANTをただ便利な型だと思って使ってると痛い目を見る。 かなりデリケートに扱わないと、いつのまにかメモリリークってことになるので注意。
確保したリソースを解放し、VT_EMPTY を設定し、初期化します。 ネタ元 VARIANT型について Part.3 【Visual C++】
OLE2T が実行されるたびに、スタック領域が消費されるのでループ内での使用や、非常に大きな文字列の使用は避けなければなりません。 ヒープに変換して使うなら、こう。 #include <memory> std::unique_ptr<TCHAR[]> p_json(new TCHAR[json.length()]); long len = mbstowcs( </tchar[]></memory>…
初期化忘れると一見動いてるようでもバグってますよ。 VARIANT ret; VariantInit(&ret); ret = Hoge();ネタ元 http://marupeke296.com/IKDADV_CPP_VARIANT.html
書きなぐりメモ intの配列をSAFEARRAYで渡す場合は Cpp COleSafeArray arg; ... pVarg[0].vt = VT_ARRAY | VT_I4; pVarg[0].parray = arg.parray; C# public bool func00(int[] p_candle){ .... return true } ネタ元 VARIANT and VARIANTARG http://www.mat…
マーシャリングは…非.NETのデータ構造を.NETのオブジェクトに変換すること(もしくはその逆)です。 .NETの全てのオブジェクトはガーベージコレクタによりメモリ管理されています。そのため、.NETのオブジェクトのことをマネージドオブジェクト、そこで使わ…
Microsoft Foundation Class(MFC)には BSTR をラップするヘルパー クラスがありません。代わりに、別の方法で BSTR と MFC の CString クラス間の変換が簡単に行えます。次のように BSTR を CString コンストラクタに渡すだけで BSTR を CString に変換で…
[COM]_bstr_t はBSTR型のラップするスマートポインタみたいなクラスらしい。スコープ抜けるとSysFreeString()コールしてくれるみたいなので、自分で解放しなくてもいいらしい。中のBSTRにアクセスするときはGetBSTR()でいける。ネタ元 _bstr_t は何気に便利…
[VC][VB][COM]どうも内部はdoubleの値となっているようで、それを渡せればOKみたい。 #include "ATLComTime.h" … DISPPARAMS params; ::memset(¶ms, 0, sizeof(DISPPARAMS)); params.cNamedArgs = 0; params.rgdispidNamedArgs = NULL; params.cArgs = 1…
// 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…