Announcement

Collapse
No announcement yet.

DLL-COM-Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL-COM-Problem

    heyho...

    hab' ein Problem mit der Initialisierung eines COM-Servers aus einer DLL heraus:
    Ich habe eine Java-Anwednung, die - logischerweise - kein COM versteht. Also gehe ich den "Umweg" eine DLL-Datei in Delphi zu entwickeln, die mir diesen Part abnimmt. Ich rufe also über das JNI von Java diese DLL auf und übergeb ihr einen (xml)String. Soweit so gut. Bis hier hin geht's, der String kommt auch sauber in der DLL an!
    Nun muss dieser String an eine andere (Windows-basierte) Anwedung weitergegeben werden. Dafür stellt diese Anwendung einen COM-Server zu verfügung, den ich aus der DLL instanzieren will. Nach mehreren Wortwechseln im Delphi-Treff-Forum, kam ich dann soweit, dass ich den Aufruf TProcedure(InitProc); [Danke auch an A. Kosch und sein COM-Buch ;-)]und CoInitialize(nil); setzen muss. Trotzdem gibt's auch dann noch (zumindest bei diesem spez. COM-Server) eine Read-Schutzverletzung... Bei anderen COM-Servern (z.B. XMLDOMDocument) läuft's damit...
    Nun meine Frage: was muss ich alles beachten, wenn ich einen COM-Server aus einer DLL, bzw durch aufruf einer reinen Java-Konsolenanwendung (als Client) instnzieren will??? Wie bekomme ich den doofen Read-Fehler weg???

    greetz
    Christian

  • #2
    Hallo,

    um die Ursache für dieses Problem einzukreisen, würde ich in <b>jeder</b> exportierten Schnittstellenprozedur der DLL die folgenden Schritte abarbeiten: <br>
    1. CoInitialize(nil) aufrufen // Apartment anmelden <br>
    2. Instanz vom COM-Server in einem Try-Block anfordern und in einer lokalen Interface-Variable ablegen <br>
    3. Interface-Methode des COM-Servers aufrufen <br>
    4. Interface-Zeiger des COM-Servers auf nil setzen <br>
    5. Im Finally-Block CoUninitialize aufrufen //Apartment abmelden <br>
    Wenn es dann immer noch Problem gibt, kann die Ursache nicht im COM-Teil liegen.
    &#10

    Comment


    • #3
      tja...

      das alles hab' ich eigentlich so gemacht (ausser dem CoUinitialize -> in deinem Buch steh, dass dieser nich unbedingt gemacht werden muss, da dies im finally-Block der COM-Server-Freigabe geschieht :-) )... naja, was soll's ich glaub allmählich, dass der COM-Server, den ich da verwenden will (der leider nicht von mir ist) einen "an der Waffel" hat... :-( und es deshalb nicht funktioniert. denn warum sollte denn ein CreateOleObject('[XMLDomDocument-COM-Server]') funktionieren und der andere CreateOleObject('[other-COM-Server]') nicht?!? aber trotzdem danke... greetz christia

      Comment


      • #4
        gibt es dafür auch ein code-beispiel??
        das würde mir sehr helfen!

        Comment

        Working...
        X