FileTimeToSystemTimeで

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Tako

FileTimeToSystemTimeで

#1 投稿記事 by Tako »

AB5.0にて下記コードをデバッグ実行するとエラーが出ます。

コード: 全て選択

スレッド(&H8E4)でアクセス違反がありました(EIP=&H77BF2A16/ESP=&H00000010)。
FileTimeToSystemTime()か、sprintf()のどちらかをコメントにするとエラーは出なくなります。
原因は何でしょう??

コード: 全て選択


	Dim tLMT As SYSTEMTIME
	Dim fTimt As FILETIME
	Dim tLMTp1 As SYSTEMTIME

	GetLocalTime(tLMT)

	SystemTimeToFileTime(tLMT , fTimt)
	FileTimeToSystemTime(fTimt , tLMTp1)

	Dim Sumtime(50) As Byte 
	sprintf(Sumtime As VoidPtr,"%02s/%02s %02s:%02s:%02s",_
			tLMTp1.wMonth,tLMTp1.wDay,tLMTp1.wHour,tLMTp1.wMinute,tLMTp1.wSecond)
たかせ
記事: 215
登録日時: 2006年2月05日(日) 17:10
お住まい: 東京都

sprintfのパラータを修正してください

#2 投稿記事 by たかせ »

編集対象がLong/Word型などの変数のときはsprintfの部分を次のように変更してください。

sprintf(Sumtime As VoidPtr,"%02d/%02d %02d:%02d:%02d",_
tLMTp1.wMonth,tLMTp1.wDay,tLMTp1.wHour,tLMTp1.wMinute,tLMTp1.wSecond)

下記の場合だとポインタ変数が指す文字列の編集と扱われます。
つまり文字列データを編集するときの方法となります。
sprintf(Sumtime As VoidPtr,"%02s/%02s %02s:%02s:%02s",_
tLMTp1.wMonth,tLMTp1.wDay,tLMTp1.wHour,tLMTp1.wMinute,tLMTp1.wSecond)

この場合はプログラムでアクセスできないアドレスを参照しようとしたので実行時にエラーになったと思われます。
sprintfの仕様についてはABのヘルプに記載されていませんがパラメータの指定方法はwsprintfとほぼ同じです。

よろしくお願いします。
Tako

Re: FileTimeToSystemTimeで

#3 投稿記事 by Tako »

たかせ様

無事に動作しました。
ありがとうございました。
返信する