Я пытаюсь передать значения из программы на C ++ в VMS.
$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 *), однако ожидаемой является длина строки, полученная из размера массива символов.
Рабочие примеры в C для Lib $ set_symbol а также Lib $ set_logical, в том числе как правильно делать дескрипторы и стандартизированная проверка ошибок. Вам не нужны привилегии для выполнения этих функций, так что да, это «надежно».
Чтобы увидеть результаты программ, вы должны набрать (для моих примеров):
$ SHOW SYMBOL/GLOBAL LIB_SET_SYMBOL_TEST
а также:
$ SHOW LOGICAL LIB_SET_LOGICAL_TEST