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