Space писал(а):я взял код из инета. Да и вообще, как не передавай, не работает.
А просто не надо тырить код из интернета и хныкать, что он не работает. Надо читать документацию. Читать документацию. Читать документацию. Читать документаци. Документацию читать, а также читать документацию.
В документации по CLSIDFromString сказано, что функция ждёт указатель на OLESTR (он же BSTR).
В документации по OLESTR (BSTR) сказано, что это такое.
В статьях о VB сказано, что все строки внутри хранятся именно в этом формате.
В статьях по Declare Function сказано, что при вызове все строки из BSTR конвертируются ASCIIZ-строк, и что нет способа повлиять на (отключить) это поведение.
Тяжело для мозга, да,
сопоставить 4 этих факта, чтобы понять, что Declare не самый хороший способ объявить эту функцию, и что лучше всего использовать TLB? Тем более, что это OLE-функция, и есть готовый olelib.tlb.
А может, ты ещё знаешь, в каком формате записана строка? Где старшие байты, где младшие?
Я-то, конечно, знаю. Но если ты не знаешь, тяжело прочитать документацию по гуидам? А я бы и документацию искать/читать не стал, я бы исходя из того, что функция работает строго в соответствии с документацией (и никак иначе), подсунул бы ей тестово-маркерную строчку (dead4fee-fade-face-и-т-д} а потом посмотрел бы, во что сконвертировалось, и на основании этого определил бы, где старшие, где младшие. Это всё 10 секунд. Это всё в тысячу раз быстрее, чем потратил ты времени на создание топиков и выяснение этого вопроса.