■75306 / ) |
VB.netからVC++6.0のへの構造体配列参照渡し |
□投稿者/ とら (1回)-(2015/03/12(Thu) 19:36:57)
|
分類:[VB.NET/VB2005 以降]
2015/03/12(Thu) 19:55:24 編集(投稿者) 2015/03/12(Thu) 19:54:46 編集(投稿者) 2015/03/12(Thu) 19:54:40 編集(投稿者)
<pre><pre>VB6.0で作成した実行ファイルからVC++6.0で作成したDLLに値を参照渡ししているものがあり、 このたびVB.net2008にアップグレードする事になりました。(なぜ2013ではないのかは置いといてください)
アップグレードウィザードを通してエラーや警告を除外した後に動作確認をしたところ、DLLの呼出し時に 予期せぬ動作が起きていて詰まっています。
DLLを呼び出す際に構造体の配列を参照渡ししているのですが、配列を10で作成し参照渡しして 戻ってきた配列が1つになってしまいます。
色々調べてみたところ、値渡しにすると大丈夫(配列なのでそもそも参照型だから参照の値渡しになる) といった記述があったので試してみたのですが、配列は10のままで戻ってくるようになったのですが、 値が格納されていません。
解決策をご存じの方、お教え頂けないでしょうか。
以下ソースになります。
-- 宣言部 ----
Declare Function Test1 Lib "TestFunc.DLL" (ByRef oStructure() as Structure1) as Integer
Public Structure Structure1 Dim int1 As Integer Dim int2 As Integer Dim int3 As Integer End Structure
'配列の作成(10個の配列として宣言) Public oStructure1(9) As Structure1
-- 処理 ----
'DLLの呼出し Dim iRet as integer = -1 iRet = Test1(oStructure1)
'呼出し後に参照で渡した(oStructure1)の数が1つになっている
・構造体の中身はすべてInt型です。 ・BV6.0で作成したモジュールからは正常に取得できています。 ・VC++6.0のDLLは変更しない方向で決定なので、DLLには手を加える事ができません ・VC++6.0側が配列を受け取った時点で1つになっています。
以上、よろしくお願いします。
|
|