、あなたはこれを行うことができます。
' Need to use DECLARE LIBRARY for the C function getcwd(string, stringSize).
DECLARE LIBRARY ""
FUNCTION getcwd$ (buffer$, BYVAL buflen)
END DECLARE
' Wrapper function for making usage of getcwd$ more BASIC-like.
DECLARE FUNCTION qb64cwd$()
' Print the current working directory.
PRINT qb64cwd$
FUNCTION qb64cwd$()
' 32768 characters should be more than large enough on any OS.
REDIM s AS STRING * 32768
qb64cwd$ = getcwd$(s, 32768)
END FUNCTION
あなたドンながら本当にラッパー関数が必要ですが、C関数では十分な量の書き込み可能なメモリを持つ文字列を渡す必要があります。つまり、getcwd
はメモリを割り当てません。それは十分な量のメモリを渡すことを期待しており、QB64の動的サイズはSTRING
でありません。したがって、十分なサイズの固定長文字列を作成し、それを関数に渡すためにラッパーが使用されます。ほとんどの場合、ラッパーはこれで十分です。これはOS XとLinux(そしてQB64が動作する他のPOSIXのようなシステムで、おそらくAndroidを含む)でも動作するはずです。私はこれらのシステムではテストしていませんが、getcwd
はPOSIX関数なので動作します。
数字が十分に大きくないとどうなりますか? QB64では、ライブラリ関数に配列を渡すことはできません。がCONST variable = ...
以外の場合は、STRING * variable
を使用することはできません。つまり、文字列を拡大して再試行することはできません。エラーが発生した場合は、何か問題があったことを伝えるためにエラーが発生するはずです(例:ERROR 75
)。
と十分に効率的でないのはどうでしょうか? – BdR
クワッドコアは最新のQB64ダーティビルドを実行せず、_CWD $をサポートしていない古い方言のQB64しか使用できません。エラールーチンが1つで、コード行が1,000行のときにエラーが発生するのは効率的ではありません。 – eoredson