verwaltete Anwendung und native Dll
-
Hallo Forum,
ich hoffe mir kann jemand helfen.
Aus einer verwalteten Anwendung rufe ich eine Funktion einer nativen DLL auf. In der Funktion wird die Verbindung zu WMI hergestellt und einige Werte ausgelesen. Der Aufruf von CoInitializeSecurity() liefert FAILED zurück.
Wenn ich die DLL aus einer nativen Anwendung aufrufe, klappt das Ganze.
Ich komme einfach nicht mehr weiter...
Bitte helft mir...Danke Schön
Maria
-
Vielleicht wurde COM überhauot nicht initialisiert... was für ein Fehlercode wird denn geliefert????
-
Fehler:
// MessageId: RPC_E_TOO_LATE
//
// MessageText:
//
// Security must be initialized before any interfaces are marshalled or unmarshalled. It cannot be changed once initialized.
//
#define RPC_E_TOO_LATE _HRESULT_TYPEDEF_(0x80010119L)
-
Warum willst Du die Security nochmals ändern?
Falls es einen wichtigen Grudn gitb, bleibt Dir nichts anderes übrig, als einen eigenen Thread auzumachen mit STA und dort dann machen was Du willst...
-
ich glaube ich habe eine Lösung, bei einem groben Test fuktioniert es.
Das Problem war: die CoInitializeSecurity(...) -Funktion sollte man bereits in der Main-Methode aufrufen. Bei meinen Hauptanwendung handelt es sich um eine WPF-Anwendung (C#) und die Main-Methode ist da ja etwas versteckt.
Geholfen haben mir folgende Links:
http://candritzky.wordpress.com/page/2/
http://lh4.ggpht.com/_jIJDXxbTxiU/SgfmNtByUxI/AAAAAAAAAIw/Ts5puzNzVwY/s1600/wpfwindowmainmethod.JPG
-
Na, das sieht doch gut aus... aber ob dies nicht in einigen Fällen zu Nebenwirkungen führt, ist schwierig zu sagen....
-
Danke Schön Jochen.
Reicht denn das Attribut [System.STAThread] vor der Deklaration der aufzurufenden Funkion, um die Funktion in einem eigenen Thread zu starten?
Ich hatte es so versucht, die Com-Initialisierung schlägt fehl, mit dem selben Fehlercode.
Ich würde schon gern die Com-Initialisierung in der DLL selbst veranlassen, krieg es aber nicht hin.