- PR -

dllに構造体を渡すとNullReferenceExceptionが発生

1
投稿者投稿内容
sob
会議室デビュー日: 2004/10/22
投稿数: 2
投稿日時: 2004-10-22 20:11
お世話になっております、初めて投稿させていただきます。

現在Cにて作成されたDLLにVB.NETにて定義した構造体を渡すと
NullReferenceExceptionが発生し、
処理が中断してしまう現象が発生しております。

先日、構造体に新しいメンバを追加され、その時点より上記エラーが発生しております。

[Cの構造体]
ID_INF
char aID[255];
char bID[255];
char cID[255];
unsigned long ulYen;

以前は一番下のulYenが存在せず、下記の用に構造体で
正常に渡す事が可能でした

[VB.NET](前回までの定義)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure g_Type_ID_INF
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public aID As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public bID As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public cID As String
End Structure

新しいメンバ追加されたので、下記の用に修正すると
NullReferenceExceptionが発生し、処理が中断してしまいます。

[VB.NET](今回の定義)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure g_Type_ID_INF
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public aID As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public bID As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=255)> _
Public cID As String
<MarshalAs(UnmanagedType.U4)> _
Public ulYen As UInt32
End Structure

値は下記の用に設定しByref渡しをしております。

Dim ID_INF As g_Type_ID_INF

ID_INF.aID = "1"
ID_INF.bID = "2"
ID_INF.cID = "3"
ID_INF.ulYen = Convert.ToUInt32(100)

又、VBでのDLL宣言をIntPtr型にして、
Marshal.AllocHGlobal
Marshal.StructureToPtr
Marshal.FreeHGlobal
で操作しても同様の結果です。

どなたか御回答いただけますでしょうか?
宜しくお願いいたします。


1

スキルアップ/キャリアアップ(JOB@IT)