我正在尝试从 VMS 上的 C++ 程序传递值。
$DESCRIPTOR( lname, (char*) "A" );
$DESCRIPTOR( lvalue, (char *) "Hello World" );
lib$set_logical( &lname, &lvalue );
lib$set_symbol (&lname,&lvalue);
它应该工作吗?如果不是,我该如何纠正?
如何检查返回值?
如果成功,我如何检查环境?
如果有效,是否可靠?(不取决于权限等)。
我正在尝试从 VMS 上的 C++ 程序传递值。
$DESCRIPTOR( lname, (char*) "A" );
$DESCRIPTOR( lvalue, (char *) "Hello World" );
lib$set_logical( &lname, &lvalue );
lib$set_symbol (&lname,&lvalue);
它应该工作吗?如果不是,我该如何纠正?
如何检查返回值?
如果成功,我如何检查环境?
如果有效,是否可靠?(不取决于权限等)。
不。查看 $DESCRIPTOR 是如何定义的,在 descrip.h 中:
#define $DESCRIPTOR(name,string) struct dsc$descriptor_s name = { sizeof(
string)-1, DSC$K_DTYPE_T, DSC$K_CLASS_S, string }
在您的示例中,lname 和 lvalue 的第一个元素都包含 3,从 (char*) 的大小派生,但预期是字符串的长度,从字符数组的大小派生。
lib$set_symbol和lib$set_logical的 C 语言工作示例,包括如何正确执行描述符和标准化错误检查。你不需要特权来执行这些功能,所以是的,它是“可靠的”。
要查看程序的结果,您可以输入(对于我的示例):
$ SHOW SYMBOL/GLOBAL LIB_SET_SYMBOL_TEST
和:
$ SHOW LOGICAL LIB_SET_LOGICAL_TEST