DOBON.NET DOBON.NETプログラミング掲示板過去ログ

vb.net 構造体を配列にした場合の固定長文字列の引渡し

環境/言語:[VB.NET + VC++]
分類:[.NET]

VS6.0からのマイグレーションにて、VS2008に変換しています。

vb.netで定義した構造体を配列化したデータを、VC++で作成したDLLに引渡しをしていますが、値が正しくわたってくれません。
ご教授願えませんでしょうか?

vb.net
------------------------------------
 Structure ptMenu
    Dim iEnable As Short 
    <VBFixedString(12), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=12)> Public iName As String 
    Dim iBackColor As Integer 
    Dim iMenuFlag As Short
  End Structure

  Dim gtmenu(63 * 9)  As ptMenu
------------------------------------

VC++
------------------------------------
#define        TMENUMAX    63 * 9
typedef struct {
    short    iEnable;        
    char    Name[12];    
    long    iBackColor;
    short    iMenuFlag;
} stMenu;
typedef struct {
    stMenu    sdProgMenu[TMENUMAX];
} vbProgMenu;


extern "C" void WINAPI DbRGetMenuMsg( vbProgMenu *buf )
{
}
------------------------------------
このような宣言を行い、VB.netから、API関数を呼び出ししても
vb.net側でセットした値が正しくVC側に反映されません。
0番目の配列の値は、VC側に正しくわたりますが、1番目以降の
配列の値がずれているようです。
 構造体に、アライメントをする必要がありそうですが、
どなたか、ご教授いただけませんでしょうか?


(例)
  gtmenu(1).iBackColor = 15 ←この値は、VC側で正しく参照できない
  gtmenu(0).iName = "12345678901" ←この値は、VC側で正しく参照できる
  call DbRGetMenuMsg(gtmenu(0))
 
 ちなみに、iNameの変数をVCも、VB.netもコメントアウトすると、正しくなります。
 String文字列宣言方法に、何か必要でしょうか?


よろしくお願いいたします。
この投稿はマルチポストです。

●マルチポストされている場所
http://bbs.wankuma.com/index.cgi?mode=al2&namber=48891

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html

DOBON.NET | プログラミング道 | プログラミング掲示板