Openvms, как передать значения в среду

Я пытаюсь передать значения из программы на C ++ в VMS.

$DESCRIPTOR( lname, (char*) "A" );
$DESCRIPTOR( lvalue, (char *) "Hello World" );
lib$set_logical( &lname, &lvalue );
lib$set_symbol (&lname,&lvalue);

Должно ли это работать? Если нет, то как мне это исправить?

Как я могу проверить возвращаемые значения?

Как я могу проверить в среде, если это удалось?

Если это работает, это надежно? (Не зависит от разрешений и т. Д.).

0

Решение

Нет. Проверьте, как определен $ 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 *), однако ожидаемой является длина строки, полученная из размера массива символов.

2

Другие решения

Рабочие примеры в C для Lib $ set_symbol а также Lib $ set_logical, в том числе как правильно делать дескрипторы и стандартизированная проверка ошибок. Вам не нужны привилегии для выполнения этих функций, так что да, это «надежно».

Чтобы увидеть результаты программ, вы должны набрать (для моих примеров):

$ SHOW SYMBOL/GLOBAL LIB_SET_SYMBOL_TEST

а также:

$ SHOW LOGICAL LIB_SET_LOGICAL_TEST
1

По вопросам рекламы [email protected]