powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
25 сообщений из 26, страница 1 из 2
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907434
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня, жентельмены.

Вытаскиваю инфу о мониторах из WMI. Спотыкаюсь на VarToStr(lItem.Properties_.Item(AProperty[pCount], 0));

Вылетает Excepation с мессаджем Could not convert variant of type (Dispatch) into type (String)

Как победить? Как узнать что именно в данный момент лежит в lItem.Properties_.Item(AProperty[pCount], 0)? И как правильно обработать это?

Мой протокол:

-- Monitor --
ManufacturerName = Could not convert variant of type (Dispatch) into type (String)
ProductCodeID = Could not convert variant of type (Dispatch) into type (String)
SerialNumberID = Could not convert variant of type (Dispatch) into type (String)
UserFriendlyName = Could not convert variant of type (Dispatch) into type (String)
UserFriendlyNameLength = 13
WeekOfManufacture = 28
YearOfManufacture = 2012


Протокол WMICodeCreator

-----------------------------------
WmiMonitorID instance
-----------------------------------
Active: Истина
InstanceName: DISPLAY\AOC1941\4&2d69ced9&0&UID50531072_0
ManufacturerName: 65,79,67,0,0,0,0,0,0,0,0,0,0,0,0,0
ProductCodeID: 49,57,52,49,0,0,0,0,0,0,0,0,0,0,0,0
SerialNumberID: 68,76,85,67,55,72,65,48,49,52,50,52,53,0,0,0
UserFriendlyName: 49,57,52,49,0,0,0,0,0,0,0,0,0
UserFriendlyNameLength: 13
WeekOfManufacture: 28
YearOfManufacture: 2012
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907451
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
ManufacturerName = Could not convert variant of type (Dispatch) into type (String)
ProductCodeID = Could not convert variant of type (Dispatch) into type (String)
SerialNumberID = Could not convert variant of type (Dispatch) into type (String)
UserFriendlyName = Could not convert variant of type (Dispatch) into type (String)

Массивы, скорее всего.
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907463
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman

Массивы, скорее всего.


Вопрос, как на ходу узнать массив ли это, и как вынимать данные из него?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907465
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VarType()
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907466
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer
VarType()


VarTypeAsText(VarType(lValue)) утверждает, что там Dispatch
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907476
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907477
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Видел. Там серийников нет. Я вынимаю из root\WMI WmiMonitorID
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907490
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC


Видел. Там серийников нет. Я вынимаю из root\WMI WmiMonitorID

Мне выдает немного более понятную ошибку:

First chance exception at $76B85EF8. Exception class EVariantTypeCastError with message 'Could not convert variant of type (Array Variant) into type (String)'. Process Project1.exe (12452)
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907494
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman

Мне выдает немного более понятную ошибку:
First chance exception at $76B85EF8. Exception class EVariantTypeCastError with message 'Could not convert variant of type (Array Variant) into type (String)'. Process Project1.exe (12452)


Delphi которая?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907497
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
wadman

Мне выдает немного более понятную ошибку:
First chance exception at $76B85EF8. Exception class EVariantTypeCastError with message 'Could not convert variant of type (Array Variant) into type (String)'. Process Project1.exe (12452)


Delphi которая?

2007
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907543
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  LDisp: IDispatch;
  LType: ITypeInfo;
  LName: WideString;
begin
  LDisp :=  lItem.Properties_.Item(AProperty[pCount], 0) as IDispatch;
  OleCheck(LDisp.GetTypeInfo(0, 0, LType));
  OleCheck(LType.GetDocumentation(MEMBERID_NIL, @LName, nil, nil, nil));
  ShowMessage(LName);
end;
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907559
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  LDisp: IDispatch;
  LType: ITypeInfo;
  LName: WideString;
begin
  LDisp :=  lItem.Properties_.Item(AProperty[pCount], 0) as IDispatch;
  OleCheck(LDisp.GetTypeInfo(0, 0, LType));
  OleCheck(LType.GetDocumentation(MEMBERID_NIL, @LName, nil, nil, nil));
  ShowMessage(LName);
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
   lValue := lItem.Properties_.Item(AProperty[pCount], 0);

   if not VarIsNull(lValue) then
     if lValue.IsArray = 0 then
       sValue := Trim(VarToStr(lValue))
     else
       begin
         Writeln(lValue.Value[0]); <- Сейчас бьюсь с размером массива 
       end;
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907562
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
Код: pascal
1.
 Writeln(lValue.Value[0]); <- Сейчас бьюсь с размером массива 

И что? Вопрос в чем?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907567
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

И что? Вопрос в чем?


Докуда инкрементить 0?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907571
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопщем, победа.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
                  cCount := 0;

                  while lValue.Value[cCount] <> 0 do
                    begin
                      sValue := Concat(sValue, Chr(Byte(lValue.Value[cCount])));

                      Inc(cCount);
                    end;



Всем спасибо
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907575
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
Вопщем, победа.
Код: pascal
1.
sValue := StrPas(@lValue.Value[0])
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907612
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Код: pascal
1.
sValue := StrPas(@lValue.Value[0])




Не, не глотает :(
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907619
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
Не, не глотает :(
Почему? А если так
Код: pascal
1.
sValue := StrPas(PChar(@lValue.Value[0]))
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907625
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Почему? А если так
Код: pascal
1.
sValue := StrPas(PChar(@lValue.Value[0]))




[DCC Error] *.dpr(152): E2036 Variable required
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39907685
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл пользу с топика. Проверил пример из SO (пофикшенный) на своём компе. Выдало:

Device ID DesktopMonitor1
Caption Generic PnP Monitor
Description Generic PnP Monitor
Manufacturer (Standard monitor types)
Type Generic PnP Monitor
ScreenHeight 1080
ScreenWidth 1920
-----------------------------------------------
Device ID DesktopMonitor2
Caption Generic PnP Monitor
Description Generic PnP Monitor
Manufacturer (Standard monitor types)
Type Generic PnP Monitor
ScreenHeight
ScreenWidth
-----------------------------------------------

пришлось попросить винду обновить драйвера (странно что сама не догадалась при изменении конфигурации мониторов)
теперь:

Device ID DesktopMonitor1
Caption SyncMaster P2250(G)/P22500(G),Magic P2250G(Digital)
Description SyncMaster P2250(G)/P22500(G),Magic P2250G(Digital)
Manufacturer Samsung
Type SyncMaster P2250(G)/P22500(G),Magic P2250G(Digital)
ScreenHeight 1080
ScreenWidth 1920
-----------------------------------------------
Device ID DesktopMonitor2
Caption BenQ LCD
Description BenQ LCD
Manufacturer BenQ
Type BenQ LCD
ScreenHeight
ScreenWidth
-----------------------------------------------

Непонятно почему на втором мониторе разрешение дисплея не кажет. Может из-за 4К? Кто-нить на мультимониторной может проверить данные о разрешении второго монитора?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39908500
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Кто-нить на мультимониторной может проверить данные о разрешении второго монитора?
У меня вообще сюр

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Caption      Монитор по умолчанию
Description  Монитор по умолчанию
Device ID    DesktopMonitor1
Manufacturer 
Type         Монитор по умолчанию
ScreenHeight 
ScreenWidth  
===============
Caption      SyncMaster 740Nl/740NPLUS
Description  SyncMaster 740Nl/740NPLUS
Device ID    DesktopMonitor2
Manufacturer Samsung
Type         SyncMaster 740Nl/740NPLUS
ScreenHeight 900
ScreenWidth  1600
===============

При этом разрешение 1600х900 у первого монитора, а не у SyncMaster.

И первому монитору винда сама обновлять драйвера не хочет, а искать мне влом
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39908512
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
При этом разрешение 1600х900 у первого монитора, а не у SyncMaster.
И первому монитору винда сама обновлять драйвера не хочет, а искать мне влом
Никому нельзя доверять))
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39908536
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
искать мне влом
Поставил таки драйвера, но вывод программы не изменился
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39908552
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
_Vasilisk_
искать мне влом
Поставил таки драйвера, но вывод программы не изменился

Номера в настройках точно такие, как ожидаются?
...
Рейтинг: 0 / 0
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
    #39908565
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Номера в настройках точно такие, как ожидаются?
Какие номера? Там, где разрешение выставляется? Да. Первый LG 1600x900, второй Syncmaster 1024x768. LG основной
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]