トップページ > プログラム > 2016年09月18日 > /Q0b75iC

書き込み順位&時間帯一覧

3 位/178 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000040100000038



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【QBASIC互換!?】FreeBasic【GPL】
クラス名・変数名に迷ったら書き込むスレ。Part26 [無断転載禁止]©2ch.net

書き込みレス一覧

【QBASIC互換!?】FreeBasic【GPL】
671 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:04:30.43 ID:/Q0b75iC
>>669
そのマイクロソフト自身も現在はシステムハンガリアンの使用を禁止しているよ
動的型付け言語ならまだ有効だと思うけど、今となっては悪習の1つだな
アプリケーションハンガリアンは使い方次第では有効だから良いけどね
強制するつもりはないから、あくまで参考程度に聴いてくれると助かる

>Basic は型を多少間違えても、適当に直して解釈してくれる
暗黙のキャストはFreeBASICでもあるけれども(例:double型からinteger型への代入)
値型とポインタ型は全く別物だから、暗黙のキャストを通してしまうと
とんでもない誤動作が起きてしまうから、コンパイラが知らせてくれるのよ
以前にポインタ型は参照型ではないと言ったのも、その理由から

例えば、integer型をinteger ptr型に暗黙的に代入できたら
integer型の数値がアドレスに変換されて
別のアプリケーションが専有するメモリや未定義のメモリ領域を参照して
とてつもない破壊活動が行われてしまう
アセンブリをやっていたなら、その辺りの怖さを知っていると思う
【QBASIC互換!?】FreeBasic【GPL】
672 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:20:26.05 ID:/Q0b75iC
>>670
そういう習慣は、言語に合わせて替えていくべきだと思うよ
そういえば、>>665のコードではconstを気にしていなかったけど
変数宣言で変化のないものは定数とするべきだな、よく忘れるw
>>665のコードの動作確認していないけれど、動いてる?

色々と興味深い話、ありがとね、凄く勉強になるよ
Fortranとか名前位しか知らないよw
クラス名・変数名に迷ったら書き込むスレ。Part26 [無断転載禁止]©2ch.net
602 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:38:07.71 ID:/Q0b75iC
>>601
自分が自分を信じられないなら自分が自分を信じてる自分を信じろ
関西人なら通じる
【QBASIC互換!?】FreeBasic【GPL】
673 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:47:25.17 ID:/Q0b75iC
>>671
>integer型をinteger ptr型に暗黙的に代入できたら
FreeBASICでは「警告」しか発しないので注意ね
コンパイルは通ってしまう

古いコードとの互換性の為だと思うんだけど
はっきり言ってコンパイルエラーで良いと思うんだけどね
クラス名・変数名に迷ったら書き込むスレ。Part26 [無断転載禁止]©2ch.net
607 :デフォルトの名無しさん[sage]:2016/09/18(日) 16:13:20.39 ID:/Q0b75iC
質問者も回答者も必要としているから来ているのに
全否定するなら来なきゃいいのにね
コミュニティ(プロジェクトチームだよね?)が存在するなら
規約があるだろうに
【QBASIC互換!?】FreeBasic【GPL】
675 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:19:13.94 ID:/Q0b75iC
>>674
Windows APIを調べて書き直して、動作確認してみた
色々と勘違いと間違いがあったので動いたコード載せておくよ

#Include "windows.bi"

Const StrLength As Long = 5120

Dim IniFile As String = ExePath + "/VB.ini"
Dim strValue As ZString*StrLength
Dim strValuePtr As ZString Ptr = @strValue
Dim strValueSize As Long = GetPrivateProfileSectionNames(strValuePtr, StrLength, IniFile)

If (strValueSize + 2) = StrLength Then End ' この判定はもっと良い方法があるはず

Dim count As Integer
Dim Zcount As Integer

While count < strValueSize
Dim tmp As String = *strValuePtr
Dim length As Integer = Len(tmp) + 1
count += length
strValuePtr += length
Zcount += 1
Print tmp
If Zcount > 1000 Then Exit While
Wend
【QBASIC互換!?】FreeBasic【GPL】
676 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:20:56.59 ID:/Q0b75iC
>>674
まず、ファイルオープンいらない
APIにHandleを渡す必要無いのに何故ファイルをオープンする必要があるのかって思ってた
そもそもFreeBASICはFreeFileでLong型のファイルナンバーで管理している
次にファイル名は、ini拡張子でないと読み込んでくれない
GetPrivateProfileSectionNamesの第一引数にバッファのポインタ、第二引数にバッファサイズを渡す
その戻り値はエラーコードじゃなく、使用したバッファサイズを返す
バッファサイズが足りない場合は、指定したバッファサイズ-2の値が返る

横着なことせずに、ちゃんと調べるべきだった
【QBASIC互換!?】FreeBasic【GPL】
677 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:39:22.82 ID:/Q0b75iC
>>676
自分の勘違い間違いまとめ

GetPrivateProfileSectionNamesにバッファへのポインタを渡すから
第二引数にバッファサイズを渡すのは至極当然のことなのに
使用したバッファサイズを返す値と勘違いしていた
それも戻り値がエラーコードだと思ってたからなんだけど

GetPrivateProfileSectionNamesがファイルのオープンから読み込みまで
全部引っ括めてやると思っていなかった
だからファイルオープンが必要なんだろうと、ちょっと引っかかっていたけど
そのまま流した

ファイル名、これは全然動作に関係ないと思ってた
INIもTXTも同じ物だしって単純な思考


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。