BSTR* verwende (Achtung Anfänger...)



  • Hi, also das Problem ist, dass die Funktion der ich das übergebe das:

    BSTR * wert
    

    erwartet.



  • Ahh logisch muss ja mit & aufrufen. Outch.

    Weiteres Problem mit der Funktion der ich es übergebe:

    Unzulässiger Aufruf einer nicht statischen Memberfunktion

    Ja, es geht um meine VB-Dll 😉



  • Achtung! Wenn die Funktion das so erwartet, dann bist Du dafür zuständig, dass Du den Speicher wieder mittels "SysFreeString" freigibst!



  • Ok, ich habe den Funktionsaufruf jetzt mit ..(&x,&y) vorgenommen.
    Das funktioniert auch. Der Compiler meckert jetzt mit mir allerdings,
    weil ich einen "unzulässigen Aufruf einer nicht statischen Memberfunktion"
    vornehmen würde(??).

    Der Namespace der DLL wurde mit

    using namespace EXPORTMAP
    

    vorgenommen.
    Nun ist innerhalb des Namespace folgende Verkettung gegeben:

    (Ich rufe in meiner Anwendung wie folgt auf:)

    EXPORTMAP::_xStart::ExportItem(&x,&y);
    

    Vielen Dank für den Hinweis mit SysFreeString. Das war mir ebenfalls
    nicht bekannt.

    Was will mir der Compiler mit dem Fehler sagen? Wie soll ich die
    Funktion denn sonst aufrufen?



  • Du musst eine Instanz von der Klasse/Objekt erstellen bevor Du davon Methoden aufrufen kannst...



  • Mal ne ganz dumme Frage, aber wie kann ich diese Instanz erzeugen?
    Mein Compiler meckert mit mir, sobald ich dabei den Namespace-Bezeichner
    verwende.

    Müsste es nicht inetwa so aussehen

    EXPORTMAP pt = EXPORTMAP::_xStart;
    

    Dann der Zugriff mittels pt(..); ??
    Wäre toll, wenn du mir da nochmal Nachhilfe geben kannst 😃
    Sofern ich bei google schon fündig geworden bin, poste ich hier.

    Ich finde es übrigens gut, dass auch Neulinge, die praktisch nur aus Büchern
    lernen können, hier nicht im Stich gelassen werden 👍



  • Wie bindest Du denn die DLL/OCX ein? Via "#import"?
    Dann mach es doch so:

    (Schlechtes Beispiel für Word (PS: Word spricht man normal nur via IDispatch an und nicht via #import):

    #import "C:\\Programme\\Microsoft Office\\OFFICE11\\msword.olb" raw_interfaces_only, rename("ExitWindows", "_ExitWindows")
    #include <windows.h>
    #include <tchar.h>
    int _tmain()
    {
      CoInitialize(NULL);
      {
        Word::_ApplicationPtr app;
        app.CreateInstance("Word.Application");
    
        // read the version
        BSTR version;
        app->get_Version(&version);
        wprintf(version);
        SysFreeString(version);
      }
      CoUninitialize();
    }
    


  • Ich binde wie von dir empfohlen via #import die EXPORTMAP.DLL ein

    dazu

    using namespace EXPORTMAP
    

    In der EXPORTMAP.tlh habe ich dann auch die Funktion gefunden,
    die ich aufrufen muss. Diese ist definiert unter einer

    struct _xExport
    

    worin wiederum steht

    virtual HRESULT __stdcall norm_Export(BSTR *...)
    

    Ich muss dann doch, wenn ich es richtig nachvollzogen habe so vorgehen:

    _xExport app;
    app.norm_Export;
    

    Ergebnis:

    'EXPORTMAP::_xExport: Instanz von abstrakter Klasse kann nicht erstellt werden
    'norm_Export': Ist kein Element von 'EXPORTMAP::_xExport'



  • Hast Du mein Beispiel angeschaut!?

    Das Ausschlagebende in meinem Code ist:

    Word::_ApplicationPtr app; 
        app.CreateInstance("Word.Application");
    


  • Folgendes ist bei Dir falsch:

    * Du musst Deine MFC-Anwendung mit „Autoamtion“ im Wizward erstellen! Sonst wird das ganze COM-Zeugs gar nicht initialisiert!
    * Du musst bei Verwendung der GUID geschweifte Klammern angeben


Anmelden zum Antworten