■75321 |
Re[5]: VB.netからVC++6.0のへの構造体配列参照渡し |
□投稿者/ 魔界の仮面弁士 -(2015/03/13(Fri) 15:08:55)
| ■No75314 (とら さん) に返信 > Test1_API int __stdcall Test1(LPSAFEARRAY *Type1) そっちでしたか! まさかと思ったら、本当にセーフ配列だったという。(^_^;
> VC++6.0側は内容が理解できなかったのでメソッドの宣言部のみです 私も C++ は専門外(というかホボ素人)なので、そこまで想像が追いつきませんでした。 ユーザー定義型の配列を SAFEARRAY でやりとしたことは無いんですよね…。
> Declare Function Test1 Lib "TestFunc.DLL" (ByRef oStructure() As Structure1) As Integer
MarshalAs 指定は必要になるだろうということで、SafeArray 指定で ・SafeArray ・SafeArray, SafeArraySubType:=VT_USERDEFINED ・SafeArray, SafeArraySubType:=VT_RECORD, SafeArrayUserDefinedSubType:=GetType(Structure1) などを試してみましたが、HRESULT が E_INVALIDARG(0x80070057) を返すばかり。
LPArray でも試してみましたが、 ・LPArray, ArraySubType:=AsAny ・LPArray, ArraySubType:=LPStruct ・LPArray, ArraySubType:=Struct 実行はできるものの、配列が 1 個になってしまう様子。
かといってここに SizeConst や SizeParamIndex を指定すれば、 MarshalDirectiveException が発生するという状況。
はてさて…。
https://msdn.microsoft.com/ja-jp/library/z6cfh6e6.aspx |
|