Patrick.Karre Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Hallo Leute, ich möchte das eine Funktion mit unterschiedlichen bzw. auch mit keinen Parametern aufgerufen werden kann. Ich weiss mittlerweile das ich irgendwie mit VARIANT arbeiten muss, weiss aber leider noch nicht so genau, wie ich damit arbeiten muss. Meine Funktion sieht bis jetzt wie folgt aus: VARIANT_BOOL CAnbindungKlickTelASCtrl::ConnectAddressServer(LONG lPort, LPCTSTR bstrIPAddress) { //CODE } und soll wie folgt aufgrufen werden können: CAnbindungKlickTelASCtrl::ConnectAddressServer(Port, bstrIPAddress) CAnbindungKlickTelASCtrl::ConnectAddressServer(lPort) CAnbindungKlickTelASCtrl::ConnectAddressServer() wenn ich meine Funktion mit beiden Parametern aufrufe, ist dies kein Problem, sobald ich einen Parameter weglasse, knallt es. Gruß aus Hanau Patrick Zitieren
bigpoint Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Hallo Leute, ich möchte das eine Funktion mit unterschiedlichen bzw. auch mit keinen Parametern aufgerufen werden kann. Ich weiss mittlerweile das ich irgendwie mit VARIANT arbeiten muss, weiss aber leider noch nicht so genau, wie ich damit arbeiten muss. warum ?? und soll wie folgt aufgrufen werden können: CAnbindungKlickTelASCtrl::ConnectAddressServer(Port, bstrIPAddress) CAnbindungKlickTelASCtrl::ConnectAddressServer(lPort) CAnbindungKlickTelASCtrl::ConnectAddressServer() Patrick ja dann deklariere die einfach im Heder etwa so: ConnectAddressServer(datentyp Port,datentyp bstrIPAddress); ConnectAddressServer(datentyp lPort); ConnectAddressServer(); Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 warum ?? Weil es sein kann, dass der Benutzer die Daten für die Verbindung hat oder nicht. Wenn nicht, werden standardwerte genommen. Eine angabe in der Klasse hat leider nicht funktioniert. Ich hatte vergessen anzugeben, dass das ganze eine ActiveX Komponente ist, daher muss dies auch in der IDL-Datei hinterlegt werden. Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Weil es sein kann, dass der Benutzer die Daten für die Verbindung hat oder nicht. Wenn nicht, werden standardwerte genommen.Dann brauchst du nur eine Funktion. Gib einfach in der Funktionsdeklaration die Standardwerte an: ConnectAddressServer(datentyp Port = 4711, datentyp bstrIPAddress = L"127.0.0.1"); Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Dann brauchst du nur eine Funktion. Gib einfach in der Funktionsdeklaration die Standardwerte an: ConnectAddressServer(datentyp Port = 4711, datentyp bstrIPAddress = L"127.0.0.1"); Das habe ich probiert, wenn ich versuche ein VB-Script auszuführen, bekomme ich die Fehlermeldung: "Das Argument ist nicht Optional". Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Das habe ich probiert, wenn ich versuche ein VB-Script auszuführen, bekomme ich die Fehlermeldung: "Das Argument ist nicht Optional". VB-Script? Du schreibst einen COM-Server? Warum sagst du das nicht vorher? IDL oder attributiert? P.S.: Verschoben nach C++: Compiler, IDEs, APIs Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Mit IDL. Das ActiveX soll von jedem Programm genutzt werden können, daher auch über die "Schnittstelle" VB-Script. Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Und wie sieht die Deklaration der Funktion in der IDL aus? Die Defaultwerte kannst du so eintragen: HRESULT ConnectAddressServer([in, defaultvalue(4711)] DWORD Port, [in, defaultvalue("")] BSTR bstrIPAddress); Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Gibt es keine Möglichkeit, die Funktion ohen Parameter aufzurufen? Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Wenn du die Defaultwerte so in die IDL einträgst, kannst du sie ohne Parameter aufrufen. Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Ich habe das jetzt wie folgt aufgebaut: [id(1), helpstring("method ConnectAddressServer")] VARIANT_BOOL ConnectAddressServer([in, defaultvalue(5000)] LONG Port, [in, defaultvalue("")] BSTR IPAddress); Ich bekomme aber immer noch die Fehlermeldung: "Das Argument ist nicht Optional". Habe ich etwas falsch eingetragen oder habe ich etwas vergessen? Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Ist dein Interface von IDispatch abgeleitet? Es wundert mich, dass der Compiler sich nicht an dem Rückgabetyp VARIANT_BOOL stört. Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Ja, ist es. Ich habe das Grundgerüft mit MFC erstellt. Vielleicht hilft dir diese Auskunft weiter. Bei der Funktion handelt es sich um eine Methode. Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Also meiner Meinung nach muss die Methode so aussehen: [id(1), helpstring("method ConnectAddressServer")] HRESULT ConnectAddressServer([in, defaultvalue(5000)] LONG Port, [in, defaultvalue("")] BSTR IPAddress, [out, retval] VARIANT_BOOL* pRet); Damit klappt bei mir ein Aufruf aus VBScript ohne Parameter. Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Bei mit mekert das VB-Script immer noch dies als Fehler an. Muss ich vielleicht an einer anderen Stelle noch etwas deklarieren (Funktion, Klasse usw.)? Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 26. Januar 2005 Geschrieben 26. Januar 2005 Bei mit mekert das VB-Script immer noch dies als Fehler an.Immer noch? Was hast du denn geändert? Muss ich vielleicht an einer anderen Stelle noch etwas deklarieren (Funktion, Klasse usw.)?Nein, eigentlich nicht. Wenn du willst, kannst du mir das Projekt per Mail schicken, dann kann ich es mir mal ansehen. Zitieren
Patrick.Karre Geschrieben 26. Januar 2005 Autor Geschrieben 26. Januar 2005 Ich habe den Fehler gefunden. Das VB-Script kam in die Funktion, dort hatte ich aber die Typumwandlung falsch vorgenommen. Danke. Gruß aus Hanau Patrick Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.