2016-04-05 6 views
1

Ich habe einen COM-Server in Java mit ComfyJ implementiert, die im Grunde registriert eine benutzerdefinierte Schnittstelle mit CoRegisterClassObject. Ich kann es den folgenden Java-Code Zugriff mit:Wie kann ich auf eine nicht registrierte COM-Komponente in VBA zugreifen?

OleMessageLoop.invokeAndWait(new Runnable() { 
    public void run() { 
     IUnknown unknown = new IUnknownImpl(
      COMServerSample.COMServer.CLSID, 
      ClsCtx.LOCAL_SERVER); 
     Automation automation = new Automation(unknown); 
     automation.invoke("method2", new Object[] {new Integer(123) }); 
    } 
}); 
OleMessageLoop.stop(); 

, die ich verwendet für den Zugriff auf den Server CoGetClassObject unter der Haube übernehmen.

Dadurch kann ich auf einen COM-Server zugreifen, ohne die Registrierung zu ändern und ohne Metadaten zum ausführbaren Server hinzuzufügen.

Gibt es eine Möglichkeit, von VBA aus auf diesen Server zuzugreifen? Kann ich CoGetClassObject von VBA anrufen?

+0

Was ist der Wert von ClsCtx.LOCAL_SERVER? –

+0

@FlorentB. der Wert von ClsCtx.LOCAL_SERVER ist 4 (siehe https://msdn.microsoft.com/de-de/library/windows/desktop/ms693716%28v=vs.85%29.aspx) –

+0

Haben Sie versucht, etwas wie Set obj = CreateObject ("neu: {00000535-0000-0010-8000-00AA006D2EA4}") –

Antwort

1

Um eine Instanz einer COM-Komponente mit clsid zu erstellen, können Sie CreateObject verwenden. dieses Beispiel wird eine neue Instanz der „ADODB.Recordset“:

Set obj = CreateObject("new:{00000535-0000-0010-8000-00AA006D2EA4}") 
Verwandte Themen