VC Programm mit BCC starten
-
Hallo zusammen,
ich würde gerne eine Hardware über USB ansteuern. Bei der Hardware ist ein Beispielprogramm für Visual C++ dabei. in Visual funktioniert das ganze auch.
Zuerst war ich froh das keine DLL dabei ist. VC dlls hab ich bis jetzt noch nie eingebunden bekommen. Aber jetzt bekomm ich Probleme die Klasse in Borland zu kompilieren weil mir die header fehlen.
Borland schreit nach jedemende afx... .h dateien, die in Borland nicht zu finden sind. Wenn ich die von VC nehme, dann kommen hunderte Fehler von wegen:
[BCC32 Warnung] afx.h(134): W8094 Falsche Verwendung von #pragma comment( <typ> [,"string"]) [BCC32 Warnung] sal.h(701): W8017 Redefinition von '__nullnullterminated' ist nicht identisch [BCC32 Warnung] sal.h(703): W8017 Redefinition von '__checkReturn' ist nicht identisch [BCC32 Warnung] atldef.h(76): W8094 Falsche Verwendung von #pragma comment( <typ> [,"string"]) [BCC32 Fehler] atlalloc.h(45): E2188 Ausdruckssyntax [BCC32 Fehler] atlalloc.h(45): E2299 Template-Spezialisierung kann aus 'AtlLimits<T>' nicht generiert werden [BCC32 Fehler] atlalloc.h(50): E2428 Templates müssen Klassen oder Funktionen sein
etc.
Hat jemand eine Idee was ich machen kann??
Comment: Ist echt nervig das es immer nur VC oder VB Beispiele gibt. Ist sehr selten das man einer an BC denkt
Danke schonmal
-
Hat keiner eine Idee was ich machen kann damit das unter Borland zum laufen bekomme??
oder fehlen noch Infos?
-
Naja, wenn du schon ein VisualStudio Projekt hast, dann würd ich halt auch mit VisualStudio weiterarbeiten,
und nicht versuchen irgendwie mit Borland rum zu murksen, führt nur zu unnötigen Problemen.Borland ist sicherlich nicht schlecht und ganz nett zum programmieren,
aber wenn du halt oft auf Beispielcode bzw. insbesondere auch Beispielprojekte angewiesen bist,
wäre VisualStudio eventuell der sinnvollerere Weg für dich,
da nunmal die meisten Beispiele alle für VS sind.
-
Hallo,
Welche IDE bzw. Compiler hast du denn?
Bis zum BCB6 gab es einen Menüpunkt unter Tools für Visual C++ Projektkonvertierung. Falls du den BCB5 oder 6 hast kannst du es damit versuchen.
-
Würd ungern mit visual studio arbeiten weil ich mich dann komplett neu in Entwicklungsumgebung einarbeiten müsste. Zudem hab ich keine Lizenz dafür, zum Testen hab ich nur eine Trial Version benutzt.
@Braunstein:
Ich arbeite mit CodeGear C++ Builder 2007 unter tools hab ich nichts zum konvertieren gefunden.
-
Hallo
Vielleicht ist ja hilfreich wenn du im MFC oder Compiler-Forum nachfragst, um den Code erstmal auf reines C/C++/WinAPI zurückzubauen. Insbesondere die eingebundenen Header, zum Beispiel "*afx.h" ist nur auf VS zu haben.
Wenn erstmal alle VC-spezifischen Sachen entfernt/umgebaut wurden sollte der Quellcode auch im Builder laufen.bis bald
akari
-
kannst du mich denn da hin schieben oder soll ich da einen Beitrag aufmachen?
-
Hallo
Mach am besten dort einen neuen Beitrag auf. Insbesondere solltest du nämlich noch den genauen Quellcode mitposten., sei es direkt im Post oder als Link auf die Quelle im Netz.
bis bald
akari
-
ok, danke!
-
Da bin ich wieder,
nachdem ich einigen infos aus dem MFC Forum habe, könnt ihr mir hoffentlich jetzt etwas weiter helfen. Damit ich nicht alles wieder holen muss, hier der Beitrag aus dem MFC Forum:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1558798.html#1558798
Also das ganze ist ein ActiveX element, aber damit kann ich recht wenig anfangen, kann mir hier jemand sagen wei ich das umgesetzt bekomme?
-
Mir ist, als hätte man dir dort schon gesagt, was du tun sollst: in C++Builder gibt es einen Menueintrag, der ein ActiveX-Steuerelement oder eine Typbibliothek importiert (gewöhnlich im 'Komponente'-Menu); dort solltest du die entsprechende Typbibliothek auswählen, importieren und dir Wrapperklassen generieren lassen können.
-
Und da kommen wir zu dem punkt wo ich nicht weiter komme
Ich hab mir die verschiednenen sachen da an geguckt aber werd da einfach nicht schlau draus.
Ich würd ja mal sagen das ich ganz normal ein VLC Form Anwendungsprojekt erstelle und dann in der Tool Palette einer der ActiveX Objekte auswählen muss. Da hab ich eine Automatisierungsobjekt, ein Com-Objekt, einmal ActiveX-Bibliothek und einmal Typbibliothek. Von Importieren hab ich aber niegendwo was gefunden.
-
Du schaust im falschen Bereich nach. Das ist für neue Projekte.
Was du suchst ist im Hauptmenü unter Komponenten / Komponente importieren.
-
Danke Leute, ihr seid echt spitze!!
Braunstein hat den richtigen Tipp geliefert.
Jetzt funktioniert es und ich kann die Hardware ansteuern.
-
Ich hab jetzt noch ein Problem, und zwar geht es sich darum einen wert von der Hardware aus zu lesen. In VC ist das so gelöst:
void CUsbxContDlg::OnMeasureArrivedUsbxctrl1(const VARIANT FAR& Measurement, short DeviceHandle) { CString tmp; m_selHandle.GetLBText(m_selHandle.GetCurSel(), tmp); if(DeviceHandle == atoi(tmp)) { m_csCSTM = Measurement.bstrVal; //set edit box with measurment. } UpdateData(false); }
und hier der aufruf:
BEGIN_EVENTSINK_MAP(CUsbxContDlg, CDialog) //{{AFX_EVENTSINK_MAP(CUsbxContDlg) ON_EVENT(CUsbxContDlg, IDC_USBXCTRL1, 1 /* MeasureArrived */, OnMeasureArrivedUsbxctrl1, VTS_VARIANT VTS_I2) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP()
In Borland habe ich jetzt eine Eigenschaft (??) die OnMeasureArrived heißt. Aber ich bekomm der keine funktion zugewiesen so wie es mit buttons oder ähnlichem möglich ist.
Ich hab jetzt quasi folgendes gemacht:
void TForm1::OnMeasureArrivedUsbxctrl1(farVARIANT &Measurement, short DeviceHandle) { // einfach mal leer um zu gucken ob es vom Kompiler angenommen wird } void __fastcall TForm1::Button1Click(TObject *Sender) { Test =new TOphirUsbX(Form1->Parent); [...] // inizialiserung etc. Test->OnMeasureArrived=OnMeasureArrivedUsbxctrl1; }
Da kommt aber jetzt der fehler:
[BCC32 Fehler] Main.cpp(56): E2034 Konvertierung von 'void (* (_closure )(const tagVARIANT &,short))(const tagVARIANT &,short)' nach 'TOphirUsbXMeasureArrived' nicht möglich
Hab ich was vergessen? Bzw. was ist falsch? Wie mach ich es richtig?
Danke schomal an alle!!
-
JBOpael schrieb:
Da kommt aber jetzt der fehler:
[BCC32 Fehler] Main.cpp(56): E2034 Konvertierung von 'void (* (_closure )(const tagVARIANT &,short))(const tagVARIANT &,short)' nach 'TOphirUsbXMeasureArrived' nicht möglich
Hab ich was vergessen? Bzw. was ist falsch? Wie mach ich es richtig?
Das ist primär davon abhängig, wie genau TOphirUsbXMeasureArrived definiert ist
-
Hallo,
Das einzige was ich dazu gefunde habe ist das hier
[...] // OCX properties // // OCX Events // __property TOphirUsbXMeasureArrived OnMeasureArrived={ read=FOnMeasureArrived, write=FOnMeasureArrived }; }
-
Irgendwo muß auch die Deklaration von TOphirUsbXMeasureArrived stehen. Die mußt du finden.
-
Ctrl+Click auf den Typen in deiner .cpp-Datei hilft
-
Ok, ich denke mal ihr meint das hier.
// *********************************************************************// // Definition of closures to allow VCL handlers to catch OCX events. // *********************************************************************// typedef void __fastcall (__closure * TOphirUsbXMeasureArrived)(System::TObject * Sender, VARIANT Measurement, short DeviceHandle);
Wie muss denn jetzt die Methode aussehen dich ich brauche?
-
JBOpael schrieb:
Wie muss denn jetzt die Methode aussehen dich ich brauche?
Ganz genauso. Gleiche Parameterliste, gleiche Aufrufkonvention, gleicher Rückgabewert.
Ist das nicht eigentlich offensichtlich?