对于 _CWD$ 替换,您可以这样做:
' 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
类型不会这样做,因此使用包装器创建足够大小的固定长度字符串并将其传递给函数。wrapper 在大多数情况下做得足够好。请注意,这也应该适用于 OS X 和 Linux(以及几乎任何其他运行 QB64 的类似 POSIX 的系统,甚至可能包括 Android)。我没有在这些系统上测试过,但它应该可以工作,因为它getcwd
是一个 POSIX 函数。
当这个数字不够大时会发生什么?好吧,QB64 不允许将数组传递给库函数,并且您不能使用STRING * variable
除非variable
is CONST variable = ...
。这意味着您无法扩大字符串并重试。如果碰巧告诉您出了什么问题(例如ERROR 75
),您可能应该提出一个错误。