Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > C/C++ > C++ Builder
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2014, 01:10
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию ID Материнской платы

Хочу использовать WMI
Беру пример с msdn.microsoft.com:
Код:
// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------
 Form1->Memo1->Clear();

 hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
 if (FAILED(hres))
    {
     Form1->Memo1->Lines->Add("Failed to initialize COM library. Error code = 0x");
        //return 1;                  // Program has failed.
    }
И сразу же на первом шаге ошибка - Failed to initialize COM library.
В чем дело?
Ответить с цитированием
  #2  
Старый 28.05.2014, 02:05
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Redddd
Хочу использовать WMI
Беру пример с msdn.microsoft.com:
Код:
// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------
 Form1->Memo1->Clear();

 hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
 if (FAILED(hres))
    {
     Form1->Memo1->Lines->Add("Failed to initialize COM library. Error code = 0x");
        //return 1;                  // Program has failed.
    }
И сразу же на первом шаге ошибка - Failed to initialize COM library.
В чем дело?
СиБилдера у меня нет, но на Delphi вот такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  hres: DWORD;
begin
  hres := CoInitializeEx(0, COINIT_MULTITHREADED);
  if Failed(hres) then ShowMessage(SysErrorMessage(hres));
end;
сообщает о такой ошибке: "Изменение режима для потока после его установки невозможно" - дело видимо в этом.

При работе с WMI я использовал вызов CoInitialize (а не CoInitializeEx) и то, только при работе в параллельном (не основном) потоке (thread).
Ответить с цитированием
  #3  
Старый 28.05.2014, 05:39
Аватар для Freeman
Freeman Freeman вне форума
Человек-компилятор
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 575
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
При работе с WMI я использовал вызов CoInitialize (а не CoInitializeEx) и то, только при работе в параллельном (не основном) потоке (thread).
Тут еще нужно поизучать особенности адаптации кода COM под VCL. На память сейчас не помню. Но если использовать CreateObject из ComObj, в обычном приложении ему ручной вызов CoInitialize не требуется, он прописан в тех мегабайтах кода, прилинковываемым к приложению VCL.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #4  
Старый 28.05.2014, 10:00
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Freeman
Тут еще нужно поизучать особенности адаптации кода COM под VCL. На память сейчас не помню. Но если использовать CreateObject из ComObj, в обычном приложении ему ручной вызов CoInitialize не требуется, он прописан в тех мегабайтах кода, прилинковываемым к приложению VCL.
Совершенно верно. Именно написание обычного приложения с формами я и имел ввиду - где-то в дебрях VCL прописан вызов CoInitialize. При написании же "бесформенного" или консольного приложения скорее всего CoInitialize придётся вызывать самому.
Ответить с цитированием
  #5  
Старый 28.05.2014, 19:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 2,979
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Redddd
...Failed to initialize COM library...
Без привязки к ЯП - по умолчанию служба WMI в W7 отключена, а у вас она запущена?
Ответить с цитированием
  #6  
Старый 28.05.2014, 23:30
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию

А мине для ХР
hres = CoInitialize(NULL);
Так работает, но появилась новая проблема
Цитата:
IWbemClassObject *pclsObj;
ULONG uReturn = 0;

while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);

if(0 == uReturn)
{
break;
}
uReturn возвращает ноль

Последний раз редактировалось Redddd, 28.05.2014 в 23:36.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter