![]() |
Über Wmi Netzwerk Status auslesen - Multithreaded
Hallo zusammen,
ich hab mir den Code von Phoenix zum "MAC Adresse(n) des Rechners via WMI ermitteln" ( ![]()
Delphi-Quellcode:
Hat jemand ne Ahnung was da Schief läuft?
function getSystemMACAddresses: TStringList;
var l_WMILocator: ISWbemLocator; // Locator, gets Services l_WMIServices: ISWbemServices; // Services, gets Object Definitions l_WMIObjectDefinition: ISWbemObject; // Definition, gets Set of Objetcs l_WMIObjectSet: SWbemObjectSet; // ObjectSet, gets Enum over Instances l_WMIObjectInstances: IEnumVariant; // Enum of Instances, gets Object l_WMIObject: ISWbemObject; // Object, gets Sets of his properties l_WMIPropertySet: ISWbemPropertySet; // PropertySet, gets single property l_WMIProperty: ISWbemProperty; // Property, gets Value l_TempObj: OleVariant; // temporary used values l_ObjValue: Cardinal; begin EnterCriticalSection(Guard); try result := TStringList.Create; // retrieve object enum through WMI classes l_WMILocator := CoSWbemLocator.Create; // <- CRASH ... aber nur mit MultiThread, a //aber die komplette funktion ist ja geguardet l_WMIServices := L_WMILocator.ConnectServer(WMI_LOCAL_COMPUTER, WMI_SYSTEM_NAMESPACE, '', '', '', '', 0, nil); l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS_NIC, wbemFlagUseAmendedQualifiers, nil); l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil); l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant; // iterate through enum values (WbemObjects) and get the property values while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do begin // retrieve object enum through WMI classes l_WMILocator := CoSWbemLocator.Create; l_WMIServices := L_WMILocator.ConnectServer(WMI_LOCAL_COMPUTER, WMI_SYSTEM_NAMESPACE, '', '', '', '', 0, nil); l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS_NIC, wbemFlagUseAmendedQualifiers, nil); l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil); l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant; // iterate through enum values (WbemObjects) and get the property values while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do begin l_WMIObject:= IUnknown(l_TempObj) as SWBemObject; l_WMIPropertySet := l_WMIObject.Properties_; l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_AVAILAB, 0); if not VarIsNull(l_WMIProperty.Get_Value) then begin Result.Add(l_WMIProperty.Get_Value); l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_CONNSTAT, 0); if l_WMIProperty.Get_Value=2 then begin result.Add('C'); end else result.Add('N'); end; end; end; finally LeaveCriticalSection(Guard); end; end; Achja, ich hab noch nicht viel Ahnung von Delphi, ich bin von C++ hier her umgestiegen. Vielen Dank, Highttower |
Re: Über Wmi Netzwerk Status auslesen - Multithreaded
Die Fehlermeldung bringt doch schon die Lösung:
Mein Glaskugel sagt etwas von "CoInitialize nicht aufgerufen" ... Ein Suche nach CoInitialize bringt dir viele Threads die das gleiche Problem bei Threads hatten. |
Re: Über Wmi Netzwerk Status auslesen - Multithreaded
gnar ...
Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Ich frage zuerst Google bevor ich dumme Fragen stelle. Vielen lieben dank und ein ganz großes Entschuldigung :( |
Re: Über Wmi Netzwerk Status auslesen - Multithreaded
Zitat:
Und übrigens: Herzlich willkommen in der Delphi-Praxis. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz