1

API を次のように宣言しました。

Private Declare Function GetTimeZoneInformation Lib "kernel32" (ByRef a_timezoneinfo As t_TimeZoneInfo) As Integer

t_TimeZoneInfo構造体の定義は次のとおりです。

    Private Structure t_TimeZoneInfo
        Dim tz_Bias As Integer
        <VBFixedArray(32)> Dim tz_StandardName() As Short

            Dim tz_StandardDateArray As t_SysTimeAsArray
        Dim tz_StandardBias As Integer
        <VBFixedArray(32)> Dim tz_DaylightName() As Short

        Dim tz_DayLightDateArray As t_SysTimeAsArray
        Dim tz_DaylightBias As Integer


        Public Sub Initialize()

            ReDim tz_StandardName(32)
            tz_StandardDateArray.Initialize()

            ReDim tz_DaylightName(32)
            tz_DayLightDateArray.Initialize()
        End Sub
    End Structure

そして構造t_SysTimeAsArrayは次のとおりです。

    Private Structure t_SysTimeAsArray
        <VBFixedArray(8)> Dim w_timeval() As Short ' Y M Dw D G Min S mS

        Public Sub Initialize()

        ReDim w_timeval(8)
        End Sub
    End Structure

次に、他の関数に以下のコードがあります。

Dim lfmtres As String = "" 
Dim lneedunicode As Boolean
Dim lres As Integer
lfmtres = CStr(a_tzinfo.tz_Bias) & "," & CStr(a_tzinfo.tz_DaylightBias) & "," & mCopyShortArrayToChars(a_tzinfo.tz_StandardName, 32, lneedunicode) & "," & mCopyShortArrayToChars(a_tzinfo.tz_DaylightName, 32, lneedunicode) & "," & mCopyShortArrayToNumString(a_tzinfo.tz_StandardDateArray.w_timeval, 8) & "," & mCopyShortArrayToNumString(a_tzinfo.tz_DayLightDateArray.w_timeval, 8)
lres = GetTimeZoneInformation(ltzinfo)

System.ExecutionEngineExceptionlineのタイプの Exception をスローしますlres = GetTimeZoneInformation(ltzinfo)。この種の例外は、共通言語ランタイムの実行エンジンに内部エラーが発生した場合に一般的に発生することを知っていますが、私の場合は、lib API 宣言で何か間違ったことをしていると思います。(すでにVSを再インストールしようとしたので、他のラップトップでプロジェクトを実行し、バージョンを変更しても問題は解決しませんでした)。どんな助けでも大歓迎です。

4

0 に答える 0