Window Handle
-
Hilfe!
Ich habe eine ActiveX Komponente eingebunden und
die möchte für eine Funktion ein WindowHandle.
Das soll angeblich "long" sein.Habe versucht this->Handle zu übergeben. Dann
meckert der Compiler wegen void* und long.
Wenn ich mit (long) caste, dann wird zwar das
Programm übersetetzt, ich bekomme aber beim
Aufruf eine Fehlermeldung.Hat jemand eine Idee?
Chris
HWND myhwnd;
myhwnd = (long) this->Handle;DDialCtl1->Dial( myhwnd , (wchar_t*) "275",(wchar_t*) "test");
-
Hi,
was sagt denn der Hersteller der ActiveX dazu?
//Edit: und vor allem wie sieht die Fehlermeldung aus?
mfg, Micha!
-
Den Hersteller gibt es leider nicht mehr.
Das ActiveX funktioniert unter VB einwandfrei.Ich habe wenig Erfahrungen mit ActiveX unter BCB.
Hat auch gedaueert, bis ich das compilieren konnte,
er hatte beim Konvertieren der dll eine Variable
ins Kommentarfeld reingezogen und dann hat der
Compiler dauernd gemeckert.Der Fehler ist irgendwas mit "Internal Error", also
auch leider nicht sehr aufschlussreich...
-
Hallo
Das ActiveX funktioniert unter VB einwandfrei.
Dann zeig doch mal den relevanten Ausschnitt aus dem VB-Quellcode, was für ein Handle wie dort übergeben wird.
Denn es kommt mir komisch vor, das ein Windows-Fenster-Handle als long übergeben werden soll, und dann noch an eine nichtvisuelle (?) Komunikationskomponente.
Sollte wirklich der Windows-Handle des aktuellen Fensters als long übergeben werden, machst du jedenfalls mit deinem Cast nichts falsch.Statt dem hier (wchar_t) "275"* solltest du aber besser das hier L"275" schreiben.
bis bald
akari
-
Hallo,
danke für die Antworten.
Nochmal zur Erklärung. Es handelt sich um eine Komponente,
mit der man TAPI-Anrufe machen kann, dh. man kann über ein
angeschlossenes Telefon wählen.Unter VB wird die Funktion folgendermassen aufgerufen:
Private Sub Command1_Click() DDialCtl1.Dial Form1.hWnd, "275", "name" End Subnichtvisuell:
Doch, es erscheint ja ein Fenster. Dort wird dann angezeigt,
welche Nummer angerufen wird und es ist ein Button zum
Auglegen vorhanden.
Ich dachte Window-Handels wären immer eine Long Zahl?Bei der Übernahme, des ActiveX hat BCB die folgende
Funktion draus gemacht:// OCX-Methoden void __fastcall Dial(long hWnd, BSTR DialNumber, BSTR DialName);Danke
Chris
-
Ich habs!
Hallo akari,
der Tipp mit dem "L" war wohl die Lösung.DDialCtl1->Dial( (long) this->Handle , L"275",L"name");Das funktioniert!
Was macht das "L"?
-
Hallo
Das L macht aus dem folgenden AnsiString-Literal ein Unicode-Literal, weil du für die Funktion ein wchar_t* brauchst.
bis bald
akari
-
Hallo akari,
ich bin es nochmal.
Jetzt habe ich folgendes Problem. Ich habe
die Nummer nicht mehr in der Konstanten ("123")
sondern in einer Variablen stehen (z.B. AnsiString).Wie kann ich das jetzt mit "L" umwandeln?
Wenn ich schreibe:
AnsiString test; test = "275"; DDialCtl1->Dial( (long) this->Handle , (L) test, L"cpr");dann gibt es einen Compilerfehler, dass "L"
ein undefiniertes Symbol ist.Hat jemand eine Lösung?
Definiert ist die Funktion mit BSTR
void __fastcall TDDialCtl::Dial(long hWnd, BSTR DialNumber, BSTR DialName) { GetDefaultInterface()->Dial(hWnd, DialNumber, DialName); }Beste Grüsse
Chris
-
Hallo
Da du kein Literal mehr hast kannst du auch kein "L" mehr benutzen. Du must mit der WideString-Klasse konvertieren
AnsiString test = "275"; DDialCtl1->Dial( (long) this->Handle , WideString(test).c_bstr(), L"cpr");bis bald
akari
-
Danke!