■62414 / ) |
Re[3]: C#からVBで作成したDLLへの構造体渡し |
□投稿者/ コバピー (2回)-(2011/10/08(Sat) 06:14:34)
|
■No62405 (魔界の仮面弁士 さん) に返信 > ■No62392 (魔界の仮面弁士) に追記 > >>objVBDll.xxxx(DTTbl); >>ByVal 引数ではなく ByRef 引数なので、 >> objVBDll.xxxx(ref DTTbl); >>にしてみては如何でしょう。 > > テストコードを書いて試してみたところ、うちの環境では > xxxx メソッドの引数は「ref Array dData」になっていました。 > > タイプライブラリ/相互運用機能アセンブリを自作した場合は、 > 別の定義になるかもしれませんが、少なくとも上記の場合は > Array a = DTTbl; > objVBDll.xxxx(ref a); > で呼べました。VB 側で引数オブジェクトの差し替えがある場合は > a を VBDLL.Type_Data[] に再キャストした方が良いかもしれません。 > > > >>> ((System.ComponentModel.ISupportInitialize)(objVBDll)).BeginInit(); > 確認ですが、VB 側に ISupportInitialize を Implements させてあるのでしょうか? お手数をお掛けして申し訳ありません。 「objVBDll.xxxx(ref a);」と記述した行にカーソルを移動しますと 「dynamic clsVBDll.xxxx(ref Array dData)」と表示されますので、メソッドの引数は 同じ様に認識できていると思います。 エディタ上でのエラー表示も消えましたが、実行しますと、やはり「パラメータが間違っています」 と表示されてしまいます。 尚、BeginInit();の行は、DLLの初期化の為に必要かと思い記述致しましたが、 objVBDLL = new vbDLL.clsVBDLL();行を実行した際に初期化メソッドが実行されることが分かりました ので削除致しました。 紛らわしい記述で申し訳ありません。
|
|