Einstieg in die OLE-Programmierung



  • Hallo und guten Abend liebe Community!
    Ich möchte für ein Programm (Bei dem mir die OLE_Dokumentation vorliegt..) ein kleines Programm schreiben, weiß aber nicht wie ich anfangen soll.

    In der Dokumentation gibt es eine Dummy-Funktion namens

    CreateOLEObject("")
    

    Gibt es so eine Funktion in C++ auch, wenn ja wie schaut sie aus.
    Habt ihr eventuell sogar gute Links für mich

    Vielen Dank schonmal


  • Mod

    OLE und COM ist ein so weites Feld, dass DU ersteinmal sagen müsstest um was es Dir eigentlich geht...



  • Ich möchte für ein Prgramm Scripts zur Automatisierung schreiben.
    Nun möchte ich wissen, ob es in C++ eine Funkton, we zB in VB gibt:

    CreateObject("bla.blubb")
    

    würde jetzt in VB zum Beispiel ein Objekt anlegen.
    Wie mache ich sowas in C++?
    Und welcher Datentyp muss dann angegeben werden?
    Einen Variant-Datentyp gibt es nicht in C++, oder?

    mfg



  • Guy schrieb:

    Wie mache ich sowas in C++?

    Mit reinem C++ funktioniert das natürlich nicht; du mußt zumindestens die zugehörige WinAPI-Schnittstelle benutzen. Um aber wenigstens ein Mindestmaß an Komfort genießen zu können, solltest du eines der gängigen Frameworks benutzen; welche davon dir zur Verfügung stehen, hängt von deinem Compiler ab. Bei MSVC und BCC wäre ATL eine Möglichkeit, in C++Builder gibt es noch komfortablere Wrapper, so daß du beinahe wie in einer Skriptsprache arbeiten kannst:

    Variant oleObject = Variant::CreateObject ("bla.blubb");
    oleObject.OleProcedure ("ProcName", "StringParam", 42, 3.14159);
    ...
    

    Mit VOLE soll das auch compilerunabhängig möglich sein, aber getestet habe ich es noch nicht.

    Etwas anderes ist es natürlich, wenn du eine Typbibliothek zur Verfügung hast. Dann würde ich gar nicht erst die Dispinterfaces benutzen, sondern mir von meiner IDE einen Typelibrary-Wrapper generieren lassen - soweit ich weiß, können das alle gängigen IDEs.





  • Danke sehr!
    Ich werde mir jetzt erst mal Vole anschauen.
    Kann aber morgen erst sagen obs geklappt hat 😉
    Aber ich denke, das wird kein Problem darstellen



  • Guten Abend.
    Ich konnte es doch noch jetzt ausprobieren, habe jedoch ganz viele Linker Fehler, was mir sehr komisch vorkommt, da vole und stlsoft beide nur Header haben und keine Libraries, die gelinkt werden müssten.

    Hier meine Linker Error-Liste

    [Linker error] undefined reference to `SysStringLen@4' 
      [Linker error] undefined reference to `CLSIDFromString@8' 
      [Linker error] undefined reference to `CoCreateInstance@20' 
      [Linker error] undefined reference to `IID_IDispatch' 
      [Linker error] undefined reference to `GUID_NULL' 
      [Linker error] undefined reference to `SysStringLen@4' 
      [Linker error] undefined reference to `SysStringLen@4' 
      [Linker error] undefined reference to `SysFreeString@4' 
      [Linker error] undefined reference to `CoTaskMemFree@4' 
      [Linker error] undefined reference to `CoTaskMemAlloc@4' 
      [Linker error] undefined reference to `GetErrorInfo@8' 
      [Linker error] undefined reference to `SysStringLen@4' 
      [Linker error] undefined reference to `SysAllocStringLen@8' 
      [Linker error] undefined reference to `SysFreeString@4' 
      [Linker error] undefined reference to `VariantInit@4' 
      [Linker error] undefined reference to `VariantClear@4' 
      [Linker error] undefined reference to `VariantClear@4' 
      [Linker error] undefined reference to `VariantChangeType@16' 
      [Linker error] undefined reference to `VariantInit@4' 
      [Linker error] undefined reference to `GUID_NULL' 
      [Linker error] undefined reference to `SysFreeString@4' 
      ld returned 1 exit status
    

    Dabei müsste es eig. vom Quellcode her stimmen....


  • Mod

    Stimmt! Aber Du hast die entsprechenden WinAPI Import-Libraries nicht angegeben...



  • ...die da wären?
    Sorry, wenn ich mich jetzt dumm anstelle, nur werde ich langsam ein wenig müde...
    Ich benutze btw als Entwicklungsumgebung Dev-C++ (keine Ahnung warum ich das erwähne 😉 )

    mfg


  • Mod

    Wie wäre es, wenn Du Dich erstmal mit einem Tutorial über die Grundlagen beschäftigen würdest.
    Zudem findest Du Deiner Fehlermeldung und DevC++ (das ich nicht kenne und auch nicht kennen will) genug Hits. Ich hasse es wenn Foren als Handbücher verwendet werden...

    Also fast jede WinAPI Funktion ist in einer DL implementiert, dem Linkermusst Du sagen welche das ist, das geschieht über die Import-Lib.
    Für Deine Funktionen ist das die OleAut32.lib!
    Einfach nachzulesen in der MSDN (ganz unten):
    http://msdn.microsoft.com/en-us/library/ms221236.aspx

    Würdest Du eine "vernünftige" Entwicklungsumgebung benutzen (VS z.b. oder die Express VC++ Version) würd dies die IDE über das Projekt regeln.


Anmelden zum Antworten