Mehrdeutigkeit AcitveX (genau machen ??)
-
Der CBuilder macht das ja Automatisch da kann ich nix für. Hier stelle mein Projekt mal online dann könnt ihr es euch direkt angucken.
Wenn man eine ActiveX-Bibliothek und ActiveX-Form einbindet macht Der C-Builder automatisch was mit den Klassen und Parentwindow..
Mit der Aussage wollte ich nur klar machen das es von vornerein schon 2 gleiche Klassen gibt, dagegen kann ich bei Versiob 5.0 vom C++ Builder wohl nix machen
public: // Anwender-Deklarationen __fastcall TDevices(HWND ParentWindow); __fastcall TDevices(TComponent* AOwner): TActiveForm(AOwner) {};wenn ich nun versuche Devices-> zu verlinken weiß er nicht woher er das nehemen soll. Aber guck dir das gesehen am besten selbst an habe ja alle Daetin zur Verfügung gestellt.
-
Kann ich nicht runterladen. Stimmt die Adresse?
-
Schreib doch einfach Kundendevices_tlb::Devices. Dann wäre die Unstimmigkeit doch aufgelöst.
-
Braunstein schrieb:
Schreib doch einfach Kundendevices_tlb::Devices. Dann wäre die Unstimmigkeit doch aufgelöst.
...was ja dann ungefähr dasselbe wie mein anfänglicher Vorschlag wäre.
-
Richtig. Der OP schien es aber nicht so richtig verstanden zu haben, weswegen ich es noch mal verdeutlichen wollte.
-
Hmm das mit dem Kundendevices hatte ich auch schon versucht
Kundendevices_tlb::Devices->Label1->Caption=DeviceTyp;dann kommt aber
[C++ Fehler] DevicesImpl1.cpp(617): E2108 Ungültige Verwendung von typedef 'Kundendevices_tlb::Devices'
Devices - Die andere URL war leider falsch, hier die richtige

-
Kann ich mir schon vorstellen, dass das hier nicht funktioniert.
Kundendevices_tlb::Devices->Label1->Caption=DeviceTyp;In diesem Namespace ist Devices ein Typ und keine Variable.
Mein Vorschlag wäre, dass Du Dein Formular umbenennst. Unglücklicherweise
hast Du für Dein Formular den Namen "Devices" gewählt, d.h. Du hast jetzt
eine Variable mit Namen "Devices" und einen Typ "Devices". Das halte ich
für sehr unglücklich. Am Namen des Typs kannst Du wahrscheinlich nicht
so viel ändern, da dieser durch den Import erstellt wurde.
Also bleibt nur den Formularnamen zu ändern.Gruß
Alexander
-
Hallo,
guck es dir einfach an, dann siehst du das es so nicht geht

Ich habe es auch schon mit nen anderen Namen mal erstellt ohne nur Device... da ist der selber murks
Kundendevices_tlb::Devices ist meines erachtens eh der Falsche Anlaufpunkt die Form liegt ja wo anders sieht man ja rechts in dieser Projektverwaltung

-
Ich kann da im Grunde nix machen außer richtig zu sagen wo, was, wieso. Der BCB-Builder erstellt das so blöde mit den ParentWindow und ect.
Hier nochmal, damit es keiner mehr übersieht

-
Hallo,
natürlich geht das (zumindest bei mir mit Version 2006).
Ich habe folgendes geändert:
1. Formularname auf "DevicesForm" geändert
2. Funktion GetPCTyp in "DevicesImpl1.cpp" geändert:STDMETHODIMP TDevicesImpl::GetPCTyp(BSTR DeviceTyp) // { try { DevicesForm->Label1->Caption=DeviceTyp; } catch(Exception &e) { return Error(e.Message.c_str(), IID_IDevices); } return S_OK; };3. In der Header Zeile 146 geändert:
// vorher DECLARE_VCL_CONTROL_PERSISTENCE(TDevicesImpl, TDevices); // nachher DECLARE_VCL_CONTROL_PERSISTENCE(TDevicesImpl, TDevicesForm);Damit lässt es sich zumindest kompilieren und linken.
Gruß
Alexander
-
Hab ich auch gemacht.. Bei mir gehts trotzdem nicht... oder habe ich was falsch gemacht.. Stell mal bitte das online was du jetzt verändert hast
Hier mal ne Bildreihe

Habe ich was vergessen ?
Wie man gleich sieht bekomme ich den gleichen Fehler
-
Ich weiß nicht, was Du genau gemacht hast, um das Formular umzubenennen
und was im BCB 5 passiert, wenn man das tut. Ich habe einfach einen anderen
Namen im Objektinspektor gesetzt. Dabei wurde der Name TDevicesImpl beibe-
halten. Gut möglich, dass das vom BCB 2006 falsch gehandhabt wird.
Oder hast Du ein Find/Replace gemacht?Eine Sache, die mir noch einfällt, ist, der Variablen einen anderen
Namen zu geben:extern PACKAGE TDevicesForm *DevicesForm;ändern zu (z.B.):
extern PACKAGE TDevicesForm *MyDevicesForm;Ansonsten kannst Du mal danach suchen, wo überall "Devices" (oder jetzt
"DevicesForm") auftaucht und überlegen, ob Du selbst einen anderen
Namen angeben kannst. Es geht ja hier nur um einen Namenskonflikt,
an der Logik ändern Namen ja nichts.Gruß
Alexander
-
Hallo,
ich habe auch einfach nur per Objektinspector den Namen geändert. Ich gehe davon aus das der BCB 5.0 da irgendwas anderes will braucht.. und ich weiß nicht was habe jetzt mal
extern PACKAGE TDevicesForm *MyDevicesForm;in der DevicesImpl1.h eingestellt.
Dann so umgestellt.
MyDevicesForm->Label1->Caption=DeviceTyp;Er scheint die Bezüge schon zu finden denn wenn ich MyDevicesForm-> popt dieses Fenster auf wo man dann die Objekte wählen kann alleridngs kommt ein feler vom Compiler.
[Linker Fehler] Unresolved external '_MyDevicesForm' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\ROWI\DEVICES\DEVICESIMPL1.OBJ
Was muss ich denn noch umstellen um den Linkerfehler zu vermeiden

-
Naja, die Variable ist als extern deklariert. Natürlich musst Du noch in der cpp
den Namen ändern.Gruß
Alexander
-
Hallo,
habe das jetzt in der Cpp so gemacht
TDevicesForm *MyDevicesForm;Und es kommt kein Fehler mehr beim compilieren. Danke erstmal für deine Hilfe. Nur leider macht das Programm wo ich die .ocx einbinde so einen Fehler, ich weiß nicht wodran es liegt. Entweder allgemein das er mit dem BCB5 nicht klar kommt allerdings zeigt er die Form richtig an.. vllt liegt es auch an meiner ini die ich zum einbinden nutze oder daran wie BCB5 mit den Attributen umgeht.
Naja ich halte den Thread damit auf den laufenden.