Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GUIDfromString 
:(
    Опции темы
Miyka
Дата 22.7.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Здравствуйте. Не очень понимаю как пользоватся функцией GUIDFromString. Добавил ObjBase.h, но компилятор все равно говорит что функция не инициализованна. Будет ли рабоать такой код?
Код

    LPGUID GUID = 0;
    char sGUID[] = "11111111-1111-1111-1111-111111111111"
    GUIDFromString(sGUID, GUID);

    printf("%s",GUID);

Спасибо.
PM MAIL ICQ   Вверх
borisbn
Дата 22.7.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Miyka
1. LPGUID GUID = 0;
    LP означает длинный указатель (long pointer), т.е. ты просто объявил указатель, и сказал, что он не будет никуда показывать ( = 0 )

    Делать нужно так
Код

GUID guid;

2. char sGUID[] = "11111111-1111-1111-1111-111111111111"
    в конце должна быть точка с запятой, и в доке к функции сказано
Цитата

  [in] A pointer to the null-terminated string to convert. The string should be in the following form: 
       {00000000-0000-0000-0000-000000000000}

    т.е. у тебя ещё и внутри ковычек фигурных скобок не хватает. др. словами должно быть так
Код

char sGUID[] = "{11111111-1111-1111-1111-111111111111}";

3. Вызов функции теперь должен выглядеть так
Код

GUIDFromString( sGUID, & guid );

4. printf("%s",GUID);
    так нельзя. printf умеет печатать только простые типы.
    печатать нужно так
Код

printf( "%X-%X-%X-%X%X%X%X%X%X%X%X", guid.Data1, guid.Data2, guid.Data3,
    guid.Data4[ 0 ],
    guid.Data4[ 1 ],
    guid.Data4[ 2 ],
    guid.Data4[ 3 ],
    guid.Data4[ 4 ],
    guid.Data4[ 5 ],
    guid.Data4[ 6 ],
    guid.Data4[ 7 ]
);

итого (как должно было быть) :

Код

GUID guid;
char sGUID[] = "{11111111-1111-1111-1111-111111111111}";
GUIDFromString( sGUID, & guid );
printf( "%X-%X-%X-%X%X%X%X%X%X%X%X", guid.Data1, guid.Data2, guid.Data3,
    guid.Data4[ 0 ],
    guid.Data4[ 1 ],
    guid.Data4[ 2 ],
    guid.Data4[ 3 ],
    guid.Data4[ 4 ],
    guid.Data4[ 5 ],
    guid.Data4[ 6 ],
    guid.Data4[ 7 ]
);



P.S. Только щаз заметил
Цитата

Deprecated. Converts a string to a GUID. The supported interface for converting a string to a GUID is IIDFromString.


так что придётся переписывать :(


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Miyka
Дата 22.7.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Спасибо, я понял. Про точку с запятой извинюясь, потому что эту строку писал уже тут. Эту строку я считываю с экрана и теперь не очень понимаю как лучше добавить ковычки, но это не критично. Критично то, что эту функцию, компилятор не знает, какие библиотеки надо подключить?
PM MAIL ICQ   Вверх
bsa
Дата 22.7.2011, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



подозреваю, что shell.h
PM   Вверх
borisbn
Дата 22.7.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(borisbn @  22.7.2011,  14:04 Найти цитируемый пост)

Только щаз заметил
Deprecated. Converts a string to a GUID. The supported interface for converting a string to a GUID is IIDFromString.
так что придётся переписывать :(

Цитата

[GUIDFromString is available through Windows XP with Service Pack 2 (SP2) or Windows Vista. It might be altered or unavailable in subsequent versions. Applications should use CLSIDFromString or IIDFromString in place of this function.]

см. CLSIDFromString


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Miyka
Дата 22.7.2011, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



CLSIDFromString выводит 0-0-0-00000000. 
Правильно ли я понимаю, что входящая страко это 32 символа т.е. 255 бит, а выходящая это 16 символов т.е. 128 бит?
Мне нужно GUID введенный пользователем, выводить в файл в таком виде что вы его понял комп, другими словами в 128 битным значением








PM MAIL ICQ   Вверх
borisbn
Дата 22.7.2011, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



нули выводятся из-за того, что нет фигурных скобок. их нужно добавить
Код

CLSID guid;
std::string quoteGUID = std::string( "{" ) + sGUID + std::string( "}" );
CLSIDFromString( quoteGUID.c_str(), & guid );

Цитата(Miyka @  22.7.2011,  18:23 Найти цитируемый пост)
выводить в файл в таком виде что вы его понял комп, другими словами в 128 битным значением

тогда printf тебе не нужен, т.к. он выводит в символьном виде...
пиши в файл в бинарном
Код

FILE * f_out = fopen( "out_file_name.guid", "wb" );
if ( f_out ) {
    fwrite( &guid, sizeof( guid ), 1, f_fout );
    fclose( f_out );
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Miyka
Дата 22.7.2011, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



char sGUID[] = "{11111111-1111-1111-1111-111111112222}"; 
А так нельзя?
PM MAIL ICQ   Вверх
borisbn
Дата 22.7.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Miyka @  22.7.2011,  19:45 Найти цитируемый пост)
char sGUID[] = "{11111111-1111-1111-1111-111111112222}"; А так нельзя?

можно, но ты же сам говорил

Цитата(Miyka @  22.7.2011,  18:23 Найти цитируемый пост)
Мне нужно GUID введенный пользователем




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Miyka
  Дата 22.7.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Это для теста и все равно вылазят нули.
PM MAIL ICQ   Вверх
volatile
Дата 23.7.2011, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(Miyka @  22.7.2011,  20:47 Найти цитируемый пост)
Это для теста и все равно вылазят нули. 

Все должно работать!
Код

wchar_t sGUID[] = L"{11111111-1111-1111-1111-111111112222}";
GUID guid;
IIDFromString (sGUID, &guid);
printf( "%X-%X-%X-%X%X%X%X%X%X%X%X", guid.Data1, guid.Data2, guid.Data3,
    guid.Data4[ 0 ],
    guid.Data4[ 1 ],
    guid.Data4[ 2 ],
    guid.Data4[ 3 ],
    guid.Data4[ 4 ],
    guid.Data4[ 5 ],
    guid.Data4[ 6 ],
    guid.Data4[ 7 ]
);

код скомпоновал из вышеприведенных фрагментов, так что копирайты сохраняются за borisbn.
мой здесь только 'L' (перед строкой.)
на этот L - лицензия "public domain" smile 



Это сообщение отредактировал(а) volatile - 23.7.2011, 02:42
PM MAIL   Вверх
Miyka
Дата 23.7.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 22.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Короче под мои задачи пришлось написать свой конвертер. Большое спасибо всем ответившим. Последний вариант рабочий. Еще раз спасибо smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.