none
VB2005からVC++2005のDLLの呼び出しで、「Argument Exception パラメータが間違っています」となる RRS feed

  • 質問

  • おせわになります。初心者で申し訳ありませんが以下のエラーで困っています。

    VB2005からVC++2005のDLLの呼び出しで、「ARGUMENT EXCEPTION パラメータが間違っています」となります。以下エラー内容です。

    ARGUMENT EXCEPTION
    パラメータが間違っています。 (HRESULT からの例外: 0x80070057 (E_INVALIDARG))

    VC++、VB側の記述は以下のとおりです。


    <VC++dllの記述>
    extern "C" __declspec(dllexport) short  __stdcall syhSochakMainProc(LPSAFEARRAY *dworkw)

    <呼び出し側VBの記述>
        Public Const CST_DWORK_MAX As Short = 399
        Public GtyDwork(CST_DWORK_MAX) As TyDwork
        Public Declare Function syhSochakMainProc Lib "sochak.dll" _
                (<MarshalAs(UnmanagedType.SafeArray, SafeArraySubType:=VarEnum.VT_USERDEFINED)> ByRef dwork() As TyDwork, _
        ) As Short


    <呼び出し側VBの呼び出し部分の記述>

            Dim I As Integer
            Dim ct As Short

            GtyDwork.Initialize()
            For I = 0 To 399
                GtyDwork(I).Initialize()
                GtyDwork(I).bun = ""
            Next
            Call syhSochakMainProc(GtyDwork)


    <呼び出し側VBのパラメータ記述>
        Structure TyDwork
            Dim syochi_flg As Byte
            Dim ka As Byte
            Dim dr As Integer
            Dim pflg As Byte
            Dim rflg As Byte
            Dim sflg As Byte
            Dim kflg As Byte
            Dim skbn As Byte
            Dim ikakbn As Byte
            Dim ikakbnno As Byte
            Dim ykbn As Byte
            Dim hindo As Byte
            Dim orderflg As Byte
            Dim mojibui As Integer '
            <VBFixedArray(7, 1)> Dim bui(,) As Byte
            <VBFixedArray(2)> Dim byo() As Integer
            <VBFixedArray(1)> Dim bflg() As Byte
            Dim keiflg As Byte
            <VBFixedArray(2)> Dim byostymd() As Short
            <VBFixedArray(2)> Dim byoedymd() As Short
            Dim byotnkflg As Byte
            Dim cd As Integer
            Dim ryo As Single
            Dim ten As Integer
            Dim kai As Byte
            Dim zeikbn As Byte
            Dim sykftn As Integer
            <VBFixedArray(2)> Dim symd() As Short
            <VBFixedArray(1)> Dim stm() As Byte
            Dim nsu As Byte
            Dim bun As String
            'UPGRADE_TODO: この構造体のインスタンスを初期化するには、"Initialize" を呼び出さなければなりません。 詳細については、'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="B4BFF9E0-8631-45CF-910E-62AB3970F27B"' をクリックしてください。
            Public Sub Initialize()
                ReDim bui(7, 1)
                ReDim byo(2)
                ReDim bflg(1)
                ReDim byostymd(2)
                ReDim byoedymd(2)
                ReDim symd(2)
                ReDim stm(1)
            End Sub
        End Structure


    以上よろしくお願い致します。

     

    2006年9月28日 5:34