BSTR* verwende (Achtung Anfänger...)
-
Hi, also das Problem ist, dass die Funktion der ich das übergebe das:
BSTR * werterwartet.
-
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 EXPORTMAPvorgenommen.
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 EXPORTMAPIn der EXPORTMAP.tlh habe ich dann auch die Funktion gefunden,
die ich aufrufen muss. Diese ist definiert unter einerstruct _xExportworin 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