Не нашел готовой функции получения значения переменной окружения в аксапте, поэтому реализовал сам так:
PHP код:
#define.structSize(255)
client static str getEnvironmentVariable(str VariableName)
{
/*DWORD GetEnvironmentVariable(
LPCTSTR lpName, // environment variable name
LPTSTR lpBuffer, // buffer for variable value
DWORD nSize // size of buffer
);*/
DLL _DLL = new DLL('KERNEL32');
DLLFunction _getEnvironmentVariableA = new DLLFunction(_DLL, 'GetEnvironmentVariableA');
Binary bSize = new Binary(#SizeOfInt);
Binary bStrName = new Binary(#structSize);
Binary bStrValue = new Binary(#structSize);
_getEnvironmentVariableA.returns(ExtTypes::DWord);
_getEnvironmentVariableA.arg(ExtTypes::Pointer,
ExtTypes::Pointer,
ExtTypes::DWord);
bStrName.string(#Offset0, VariableName);
bSize.dWord(#Offset0, #structSize);
if (_getEnvironmentVariableA.call(bStrName, bStrValue, bSize))
return bStrValue.string(#Offset0);
else
return "";
}
Все вроде замечательно, вот только в bStrValue пустая строка. При этом возвращаемое значение имеет правильное значение - длину значения найденной переменной окружения (с учетом 0-символа).
Если bStrValue перед запуско че-нибудь инициализировать, то значение ее не изменится, т.е. как будто он просто не туда пишет.
Что скажете?