VB.netの配列とVB6の配列の違い
VB6で画面を作成し、演算処理を行うDLLをVC6で作成しています。
下記のコードでVB6でSingle型の2次元配列を宣言しま、VCのDLLでエクスポートしている関数に渡
します。
VC6DLL側のコード----------
EXPORT void __stdcall TESTFUNC (float *pfData,long nSize{
}
VB側のコード----------
宣言
Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Long) As Long
配列宣言
Public sngDat(999,1) as single
呼び出し
TESTFUNC sngDat(0,0),1000
このように呼び出した場合、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの
ポインタをインクリメントした場合、sngDat(0,0),sngDat(1,0),sngDat(2,0)と、1次元目の添え字を
インクリメントした状態になるように、メモリに格納されています。
この動作を前提として、VB.net側でも同じように呼び出してみました。
VB.net側のコード----------
宣言
Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Integer) As Integer
配列宣言
Public sngDat(999,1) as single
呼び出し
TESTFUNC(sngDat(0,0),1000)
VC側は全く同じコードを利用するとします。
同じように、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの
ポインタをインクリメントした場合、sngDat(0,0),sngDat(0,1),sngDat(1,0)と,sngDat(1,1)、と1次元目の添え字を
インクリメントせず、2次元目の添え字をインクリメントした状態になるように、メモリに格納されています。
VB6→VC6のDLLの場合の配列渡しと、VB.net→VC6のDLLの場合の配列渡しで違いがあるのは
何故でしょうか?また、VB.net側の配列渡しの仕様を、VB6側の仕様に合わせる方法は無いのでしょうか?
よろしくお願いいたします。