Преобразование GUID

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Преобразование GUID

Сообщение Medved_ » 27.10.2005 (Чт) 11:21

Задача:
На входе переменная ID_ типа Variant/GUID из внешнего приложения.
Ее структура: (Int32 - Long, Int16 - Integer, Int16 - Integer, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte)

Вопрос: Как в VB6 (v6.0.8169) получить из этой переменной нормальную строку GUID ?

ЗЫ: Функция StringFromGUID2 из Lib "OLE32.DLL" - не работает. Type mismatch.
With the BEST regards,
Medved.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.10.2005 (Чт) 11:26

UuidToString, нормально надо объявить...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 11:37

ANDLL писал(а):UuidToString, нормально надо объявить...
:oops: Прошу прощения, но вот счас пытаюсь понять как работать с этой функцией - VB падает 2й раз!!! :x
Прошу Вас, не будите ли Вы столь любезны, привести кусок ПРАВИЛЬНОГО кода использования данной функции???
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 11:57

Все функции этого раздела объявлены в ApiViewer'е через ж.

Код: Выделить всё
Option Explicit

Private Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As Guid, ByVal lpsz As Long, ByVal cchMax As Long) As Long

Private Type Guid
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(0 To 7) As Byte
End Type


Private Sub Form_Load()
  Dim g As Guid, s As String
 
  s = String$(100, 0)
 
  StringFromGUID2 g, StrPtr(s), 100
 
  MsgBox s
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.10.2005 (Чт) 11:58

Код: Выделить всё
Option Explicit

Private Declare Function StringFromGUID2 Lib "ole32" (rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As Long
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Sub Main()
Dim g As GUID
   With g 'IID_IPicture
        .Data1 = &H7BF80980
        .Data2 = &HBF32
        .Data3 = &H101A
        .Data4(0) = &H8B
        .Data4(1) = &HBB
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H30
        .Data4(6) = &HC
        .Data4(7) = &HAB
    End With
Dim s As String: s = Space(40)
    StringFromGUID2 g, StrPtr(s), Len(s)
    Debug.Print s '{7BF80980-BF32-101A-8BBB-00AA00300CAB}
End Sub



[edit]лол, один-в-один :lol:[/edit]
Изображение

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

увы, увы...

Сообщение Medved_ » 27.10.2005 (Чт) 12:17

Ребята! Спасибо. Но я уже ее попробовал. :cry:
Во внешнем приложении, похоже, пользуется вот этот конструктор - http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemGuidClassctorTopic4.asp (с MSDN-а)...
Как видно, со структурой GUID - не совпадает.
И, посему, функция валится. Бесшумно. Но напрочЪ.
Если я заменяю объявление "rguid As Guid" на "rguid As Any", что б "подсунуть" мою переменную ID_ - происходит фигня:
1. При каждом новом запуске я получаю НОВЫЙ GUID (строку)...
2. Отловил возврат одинаковых строк на разные ID_...

**крик** СПАСИИИИТЕЕЕЕЕ !!!!
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 12:21

Какое внешнее приложение? :roll:
Причём тут .NET? :roll:
Если .NET причём, то почему бы не Guid.ToString? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

картинка для понимания

Сообщение Medved_ » 27.10.2005 (Чт) 12:26

вот что я в отладчике вижу:
Изображение
With the BEST regards,
Medved.

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

картинка для понимания

Сообщение Medved_ » 27.10.2005 (Чт) 12:29

вот что я вижу в отладчике
Вложения
for_forum_-_1.GIF
вот что я вижу в отладчике
(5.17 Кб) Скачиваний: 105
With the BEST regards,
Medved.

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 12:31

GSerg писал(а):Какое внешнее приложение? :roll:
Причём тут .NET? :roll:
Если .NET причём, то почему бы не Guid.ToString? :roll:
Это я поискал что-то похожее на видимую мной структуру... :cry: От безысходности...
.NET тут нипричем... :cry:
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 12:31

Картинка с народа...
Эх...

Ещё раз.
[cut]Причём здесь .NET и[/cut] какое ещё внешнее приложение?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 12:38

GSerg писал(а):Картинка с народа...
Эх...

Ещё раз.
[cut]Причём здесь .NET и[/cut] какое ещё внешнее приложение?
1. .NET нипричем.
2. А хрен его знает... Мне дали список объектов, с которыми можно работать - пишу вот оболочку.
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 12:42

То есть ты работаешь сам не знаешь с чем?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.10.2005 (Чт) 12:43

Medved_, блин, просто удали объявление типа GUID у себя тогда.
Изображение

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 12:53

tyomitch писал(а):Medved_, блин, просто удали объявление типа GUID у себя тогда.
Если б все так просто... VB сразу начинает ругаться на все. А при присвоении типа ANY - я уже сказал, что я получаю...
With the BEST regards,
Medved.

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 12:54

GSerg писал(а):То есть ты работаешь сам не знаешь с чем?
БД документооборота. Ядро писал не я. Написано на С#.
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 12:55

Ядро написано на C#, а .NET ни при чём?
Ты всё-таки определись, что ты делаешь и что тебе надо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 13:10

Ядро написано на C#, я пишу оболочку на VB.
Все! :evil:

ЗЫ: Вы сами не зацикливайтесь - ссылка на MSDN была приведена для примера - это просто я нашел похожую структуру, которую я вижу перед собой в отладчике.
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 13:19

Справка.
C# - это .NET.
Конец справки.

Medved_ писал(а):Все! :evil:

Стрижка только начата.



Теперь.
Что и в какой форме написано на C#, и как ты используешь это из VB?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.10.2005 (Чт) 13:37

Medved_ писал(а):
tyomitch писал(а):Medved_, блин, просто удали объявление типа GUID у себя тогда.
Если б все так просто... VB сразу начинает ругаться на все. А при присвоении типа ANY - я уже сказал, что я получаю...

Ну чёрт возьми...
Тот Guid, который тебе приходит - это хоть UDT или класс? (посмотри в Object Browser)
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.10.2005 (Чт) 14:11

Может, тебе лучше объявлять функцию как
Код: Выделить всё
Private Declare Function StringFromGUID2 Lib "ole32" (Byval LPrguid As long, ByVal lpsz As Long, ByVal cchMax As Long) As Long

А вызывать так:
Код: Выделить всё
StringFromGUID2 VarPtr(g), StrPtr(s), Len(s)

:?:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 14:14

В чём разница?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.10.2005 (Чт) 14:18

Если я правлильно понял, у него GUID объявлен как-то по другому... Однако, если структура GUID'а такая же(если это вообще структура...), то возможно такое объявление позволит избавиться от ошибки Type mismatch...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 14:19

Если бы структура GUID была такая же, any помог бы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 14:34

2ANDLL: В общем - та же "бодяга", как и при объявлении "Byval LPrguid As Any"... :cry: Неужель из-за такого переходить на другой язык... :evil: :evil: :evil:

2GSerg: Для Вашего сведения .NET это не только C# ;) тамже есть и VB.NET :)

GSerg: Есть док - ortDC - у него есть уникальный ID - как видно из рисунка. Этот ID я хочу получить в виде строки. Добираюсь до него так: Создаю объект (CreateObject) класса документов - начинаю перебор по существующим документам - смотрю ИД...

2tyomitch: А где это в ОбъектБровзер??? Я ж говорю - ИД это не мой класс! Это я получаю из внешней ДЛЛ! И его тип - Variant/GUID - как видно на рисунке!
With the BEST regards,
Medved.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.10.2005 (Чт) 14:38

Medved_ писал(а):2GSerg: Для Вашего сведения .NET это не только C# ;) тамже есть и VB.NET :)

.NET - это не только C#, но C# - это только .NET.

Medved_ писал(а):Я ж говорю - ИД это не мой класс! Это я получаю из внешней ДЛЛ!

Из какой dll? Как подключена?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 27.10.2005 (Чт) 14:44

GSerg писал(а):
Medved_ писал(а):Я ж говорю - ИД это не мой класс! Это я получаю из внешней ДЛЛ!
Из какой dll? Как подключена?
эта бодяга не подключается ч/з ДЛЛ, она зарегена в Виндах с помощью "Microsoft.NET\Framework". И с помощью ф-ии "CreateObject" я создаю объект класса "Документ"...
With the BEST regards,
Medved.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.10.2005 (Чт) 15:57

Medved_ писал(а):2tyomitch: А где это в ОбъектБровзер??? Я ж говорю - ИД это не мой класс! Это я получаю из внешней ДЛЛ! И его тип - Variant/GUID - как видно на рисунке!

Нажми F2, он появится.
Так что ты там видишь?
Изображение

Medved_
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 27.10.2005 (Чт) 11:12
Откуда: E-burg

Сообщение Medved_ » 28.10.2005 (Пт) 8:10

tyomitch писал(а):
Medved_ писал(а):2tyomitch: А где это в ОбъектБровзер??? Я ж говорю - ИД это не мой класс! Это я получаю из внешней ДЛЛ! И его тип - Variant/GUID - как видно на рисунке!
Нажми F2, он появится.
Так что ты там видишь?
Ничего я там не вижу... А что должен? :?:
With the BEST regards,
Medved.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.10.2005 (Пт) 8:58

tyomitch
Откуда он возьмется в ОбъектБровзере, если создается поздним связыванием? Да и в референсы не добавишь, потому что это не com, а .net framework класс. Возможно по этому и не помогают все эти телодвижения со StringFromGUID2
Лучший способ понять что-то самому — объяснить это другому.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

    TopList