Показать сообщение отдельно
Старый 07.10.2005, 14:52   #1  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
получение значения переменной окружения
Не нашел готовой функции получения значения переменной окружения в аксапте, поэтому реализовал сам так:

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(bStrNamebStrValuebSize))
        return 
bStrValue.string(#Offset0);
    
else
        return 
"";

Все вроде замечательно, вот только в bStrValue пустая строка. При этом возвращаемое значение имеет правильное значение - длину значения найденной переменной окружения (с учетом 0-символа).
Если bStrValue перед запуско че-нибудь инициализировать, то значение ее не изменится, т.е. как будто он просто не туда пишет.

Что скажете?