Показать сообщение отдельно
Старый 21.09.2007, 18:59   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,657 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Прочитать сформированный GUID
Используя API-функции формирую GUID. Но никак не могу получить это значение в символьном виде. Не понятно, где ошибка:

X++:
static void get_GUID(Args _args)
{

    #define.MAX_PATH(260)
    Dll             ole32          = new Dll("OLE32");
    DllFunction     coCreateGuid   = new DllFunction(ole32, "CoCreateGuid");   
    DllFunction     stringFromGUID2 = new DllFunction(ole32, "StringFromGUID2");   

    Binary          getGUID       = new Binary(#MAX_PATH);
    Binary          strGUID       = new Binary(#MAX_PATH);
    int             retVal;

    ;

    // Формирую сам GUID
    coCreateGuid.arg(ExtTypes::POINTER);
    coCreateGuid.returns(ExtTypes::DWORD);
    coCreateGuid.call(getGUID);

    // Теперь пытаюсь его перевести
    stringFromGUID2.arg(ExtTypes::POINTER,
                        ExtTypes::POINTER,
                        ExtTypes::DWORD);
    stringFromGUID2.returns(ExtTypes::DWORD);
    retVal = stringFromGUID2.call(getGUID,strGUID,#MAX_PATH);


    print "Сформированный GUID ",getGUID.string(0);

    // Теоретически, здесь должен получить строку "перевода", однако ничего нет.
    print "Перевод содержит символов ", retVal;
    print "Переведенный GUID ",strGUID.string(0);

    // Пока сделал перевод таким образом, хотя нет уверенности в его правильности
    print "Перевод вручную";
    print int2hex(getGUID.dWord(0)),
        "-", int2hex(getGUID.Word(4)),
        "-", int2hex(getGUID.Word(4+2)),
        "-", int2hex(getGUID.Word(4+2+2)),
        "-", int2hex(getGUID.Word(4+2+2+2)), int2hex(getGUID.dWord(4+2+2+2+2));
    pause;
}
Axapta 2.5 SP3