.NET ストラクチャ内での2次元Arrayの定義の仕方


Beginner  2005-09-21 15:00:07  No: 125542

VB6.0から.NETへのアップグレードの際に、2次元Arrayの扱い方に困っております。

以下、.NETコード
ここで以下のようなエラーメッセージが出ます。
"Can not marshal field AdditionalFlag of Type GETSTATUS: This type can not be marshaled as a structure field".

Public  Structure GETSTATUS
      <VBFixedArray(3, MAX_NUM - 1)> Dim AdditionalFlag(,) As Short

      Pub Sub Initialize()
             ReDim AdditionalFlag(3, MAX_NUM-1) 
      End Sub
End Structure

VB6.0コード
Public Type GETSTATUS
       AdditionalFlag(3, MAX_NUM - 1) As Integer
End Type

いろいろ調べてみたのですが、これといった答えがでなかったため、ここで質問させていただきます。このようなエラーメッセージの経験のある方いらっしゃいますか?


我龍院忠太  2005-09-21 18:38:56  No: 125543

>Pub Sub Initialize()
これは単なるタイポとすると、コードに問題ないと思いますが。
私の環境ではエラーが出ません。


特攻隊長まるるう  2005-09-21 18:58:56  No: 125544

>これは単なるタイポとすると、コードに問題ないと思いますが。
アップグレードでも問題ないですねぇ。

エラーの再現方法が書かれていませんが、もしかしたら実行中の
話ですかね?DLL に構造体を渡しているとか???
とりあえず過去ログ検索『MarshalAs』とか…。


Beginner  2005-09-21 19:31:42  No: 125545

すみません、説明不足でした。
特攻隊長まるるう様、そのとおりです。DLLにこの構造体を渡すのですが。

.NET コード
Public Declare Function GetControl Lib "ComDll" (ByVal hDev As Integer, ByVal CtlCode As Integer, ByRef SData As Integer, ByVal SDataNum As Integer, ByRef pStatus As GETSTATUS, ByVal RDataNum As Integer) As Integer

Public Function GetStatus(ByVal hDev As Integer, ByRef pStatus As GETSTATUS) As Integer
GetStatus = GetControl(hDev, CTRL_GET_STATUS,  VariantType.Null, 0, pStatus, Len(pStatus))
End Function

VB6  コード
Public Declare Function GetControl Lib "ComDll" (ByVal hDev As Long, ByVal CtlCode As Long, ByRef SData As Any, ByVal SDataNum As Long, ByRef RData As Any, ByVal RDataNum As Long) As Long

Public Function GetStatus(ByVal hDev As Long, ByRef pStatus As GETSTATUS) As Long
    GetStatus = GetControl(hDev, CTRL_GET_STATUS, vbNull, 0, pStatus, Len(pStatus))
End Function

という風に、ComDllにGETSTATUSを渡したいのですが、どうも上で説明したエラーがでてしまい、うまくいきません。
この質問とは、違ってきてしまうかもしれませんが、たとえ、このAdditionalFlagの部分をComment outしたとしても、今度は、System.ExecutionEngineExceptionがでてしまいます。当方、.NETを始めて1週間。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加