C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 127 を表示中)
■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つになっています。



以上、よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -