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

Вытаскиваю инфу о мониторах из 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
24.12.2019, 12:49
    #39907451
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
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
24.12.2019, 13:14
    #39907463
LocksmithPC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
wadman

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


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


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


Видел. Там серийников нет. Я вынимаю из root\WMI WmiMonitorID
...
Рейтинг: 0 / 0
24.12.2019, 14:07
    #39907490
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
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
24.12.2019, 14:15
    #39907494
LocksmithPC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
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
24.12.2019, 14:19
    #39907497
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
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
24.12.2019, 15:52
    #39907543
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
Код: 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
24.12.2019, 16:24
    #39907559
LocksmithPC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
_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
24.12.2019, 16:27
    #39907562
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
LocksmithPC
Код: pascal
1.
 Writeln(lValue.Value[0]); <- Сейчас бьюсь с размером массива 

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

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


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

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

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




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

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




[DCC Error] *.dpr(152): E2036 Variable required
...
Рейтинг: 0 / 0
24.12.2019, 23:25
    #39907685
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
Нашёл пользу с топика. Проверил пример из 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
26.12.2019, 15:12
    #39908500
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
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
26.12.2019, 15:31
    #39908512
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
_Vasilisk_
При этом разрешение 1600х900 у первого монитора, а не у SyncMaster.
И первому монитору винда сама обновлять драйвера не хочет, а искать мне влом
Никому нельзя доверять))
...
Рейтинг: 0 / 0
26.12.2019, 16:18
    #39908536
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
_Vasilisk_
искать мне влом
Поставил таки драйвера, но вывод программы не изменился
...
Рейтинг: 0 / 0
26.12.2019, 16:42
    #39908552
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OleVariant & VarToStr & Could not convert variant of type (Dispatch) into type (String)
_Vasilisk_
_Vasilisk_
искать мне влом
Поставил таки драйвера, но вывод программы не изменился

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


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