HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1223
にゃんちゃん構造体の参照6解決


にゃんちゃん

リンク

2014/12/23(Tue) 22:59:05|NO.66565

こんばんは。
vbmp3.dllを使って、mp3ファイルの操作をしようと思っています。構造体からデータを読み取るときに、ちょっと困ったことが発生しています。
まず、中身を読み取りたい構造体は、こんな感じに定義されています。
Public Type InputInfo
szTrackName As String * 128 '曲名
szTrackName As String * 128 'アーティスト名
channels As Long 'チャンネル数
bitrate As Long 'ビットレート(kbit/s)
samplingRate As Long 'サンプルレート(Hz)
totalSec As Long '演奏時間(s)
End Type

現在読み取りたいのは最後の4バイト、totalSec As Longの部分だけです。
以下のソースでは、パラメータの値が異常と出てしまうのですが、なにか間違っているのでしょうか?なお、関係なさそうなところは省略しています。

sdim pInfo,272//128+128+4+4+4+4 vbmp3_open varptr(filename),varptr(pInfo@) totalSec@=lpeek(pInfo@,269)

ちゃんと結果が返ってきてるかどうかを見るために、bsaveでpInfoの中身を272バイト保存してみたところ、正常にデータが帰ってきているようでした。ですが、strlen(pInfo)を実行すると、結果が0になります。
よろしくお願いします。



この記事に返信する


にゃんちゃん

リンク

2014/12/23(Tue) 23:01:08|NO.66567

すみません、モジュールのなかから引っ張ったので、すこしゴミがのこっていました。変数のあとの@はなかったことにしてください。



fortunehill

リンク

2014/12/24(Wed) 00:44:19|NO.66573

/*ご参考(文字列の区切りはNULL=0です)*/

sdim ss,260 poke ss,1,"aaa" poke ss,5,"bbb" poke ss,9,$FF mes strlen(ss) getstr gg,ss,1 :mes gg getstr gg,ss,5 :mes gg :mes peek(ss,9)



ザーメンガンダム

リンク

2014/12/24(Wed) 00:48:23|NO.66575

たぶんpinfoをバイト列としてみた場合に先頭が\0なんじゃないかなあ



にゃんちゃん

リンク

2014/12/24(Wed) 14:05:29|NO.66582

アドバイスありがとうございます。
文字列の終わりにNULLが入るとすると、中身は次のようになると思います。
NULL 以降127バイト空白(今回タグ情報がないので)
NULL 以降127バイト空白(これまた空なので)
4バイト整数*4
合計272バイト
これで、strlenで0が返されるのは最初のNULLのせいであることはわかったのですが、lpeek(268)で268バイト目から272バイト目まで読み出すのがエラーになるのはなぜなのでしょうか?



tds12

リンク

2014/12/24(Wed) 14:43:07|NO.66583

>totalSec@=lpeek(pInfo@,269)
>268バイト目から272バイト目
lpeek(pInfo@,268)にすればよいのではないでしょうか。



にゃんちゃん

リンク

2014/12/24(Wed) 18:04:53|NO.66590

tds12さん
おっしゃるとおりですね。peekの引数に0から始まるインデックス番号ではなく、間違ってバイト数を指定してただけでした。なんとお恥ずかしい…
解決しました。お騒がせしました。



ONION software Copyright 1997-2023(c) All rights reserved.