The Backyard - SafeArray Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
! VBの配列
!! 多次元配列での注意事項
!! 0開始か1開始か
!! 自動変数としてのSAFEARRAY
in引数に対するSAFEARRAYであれば、自動変数を利用することができる。
なぜならば、inは呼び出し元がメモリーアサインの責任を持っているからである。また、in,out引数として利用することも可能である。なぜならば、SafeArrayDestroy APIに対して、自動変数に割り当てられていることを知らせることができるからである。
以下にサンプルコードを示す。
GUID guid;
CLSIDFromString(L"{xxxxxx-xx...}", &guid);
SAFEARRAY sa = {
1, FADF_AUTO | FADF_FIXEDSIZE, 1, 0, &guid, { sizeof(GUID), 0 }
};
VARIANT v, vData;
VariantInit(&v);
v.vt = VT_ARRAY | VT_UI1;
v.parray = &sa;
obj->call(v);
:FADF_AUTO:スタックに割り当てられた(自動変数である)SAFEARRAYを示す
:FADF_FIXEDSIZE:伸張不可能なSAFEARRAYを示す
*詳細については、MSDNのSAFEARRAY Data Typeの項を参照
!! 多次元配列での注意事項
!! 0開始か1開始か
!! 自動変数としてのSAFEARRAY
in引数に対するSAFEARRAYであれば、自動変数を利用することができる。
なぜならば、inは呼び出し元がメモリーアサインの責任を持っているからである。また、in,out引数として利用することも可能である。なぜならば、SafeArrayDestroy APIに対して、自動変数に割り当てられていることを知らせることができるからである。
以下にサンプルコードを示す。
GUID guid;
CLSIDFromString(L"{xxxxxx-xx...}", &guid);
SAFEARRAY sa = {
1, FADF_AUTO | FADF_FIXEDSIZE, 1, 0, &guid, { sizeof(GUID), 0 }
};
VARIANT v, vData;
VariantInit(&v);
v.vt = VT_ARRAY | VT_UI1;
v.parray = &sa;
obj->call(v);
:FADF_AUTO:スタックに割り当てられた(自動変数である)SAFEARRAYを示す
:FADF_FIXEDSIZE:伸張不可能なSAFEARRAYを示す
*詳細については、MSDNのSAFEARRAY Data Typeの項を参照