![]() |
C++ Programm nach Delphi übersetzen
Hallo zusammen,
Ich habe folgendes Problem: Für eine CNC-Maschine benutze ich das Steuerprogramm ![]() Nun möchte ich aber dieses Programm über ein eigenes Programm sozusagen fernsteuern. Dazu gibt es auch ein Beispielprogramm auf der Webseite von Mach3, welches ich C++ geschrieben ist. Aus diversen Gründen will ich aber lieber ein Programm in Delphi schreiben, nur habe ich keine Ahnung wie ich mit Mach3 kommunizieren kann. Hier kann man das Beispielprogramm herunterladen (Kann mit VisualStudio kompiliert werden): ![]() Ich habe lange probiert herauszufinden wie das Beispielprogramm mit Mach3 kommuniziert, schliesslich hatte ich das Gefühl, dass es mit dem Befehl InvokeHelper(....) geschieht, doch in dessen Parameter ist kein Handle von Mach3 zu finden, was mich etwas verwirrt. Ich wäre wirklich sehr dankbar wenn irgendjemand mal das Beispielprogramm anschauen könnte und mir einen Tipp geben kann wie bzw. ob ich das selbe auch mit Delphi machen kann. P.S. Google spuckt erstaunlich wenig über den Befehl InvokeHelper() aus, weshalb ich immernoch nicht verstehe was dieser Befehl genau macht. freundliche Grüsse urbanbruhin |
AW: C++ Programm nach Delphi übersetzen
Hast du die tlb?
|
AW: C++ Programm nach Delphi übersetzen
ööhm was soll denn das sein? :?
Ich hab eigentlich nicht mehr, als das was es auf der angegebenen Homepage zum herunterladen gibt. |
AW: C++ Programm nach Delphi übersetzen
*push*
kann mir denn keiner helfen :cry: |
AW: C++ Programm nach Delphi übersetzen
Also ich hab mich nochmal bemüht soviel rauszufinden wie ich nur kann.
Hier die vermutlich wichtigsten Codeschnipsel aus dem Beispielprogramm (C++):
Code:
Die Funktion Shutdown() ist z.B. verantwortlich dafür, dass das Programm Mach3.exe (welches ich mit Delphi ansprechen will) sich selber beendet. Hier sieht man nun auch, dass die ganze Kommunikation irgendwie per "COleDispatch" oder so ähnlich funktioniert. Nur habe ich davon leider Null Ahnung.
class CMach4 : public COleDispatchDriver
{ public: CMach4(){} // Calls COleDispatchDriver default constructor CMach4(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} CMach4(const CMach4& dispatchSrc) : COleDispatchDriver(dispatchSrc) {} // Attributes public: // Operations public: // IMach4 methods public: void LoadGCodeFile(LPCTSTR FileName) { static BYTE parms[] = VTS_BSTR ; InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, parms, FileName); } void CloseFile() { InvokeHelper(0x2, DISPATCH_METHOD, VT_EMPTY, NULL, NULL); } LPDISPATCH GetScriptDispatch() { LPDISPATCH result; InvokeHelper(0x3, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, NULL); return result; } void ShutDown() { InvokeHelper(0x4, DISPATCH_METHOD, VT_EMPTY, NULL, NULL); } // IMach4 properties public: }; Per InvokeHelper() wird dann ja schlussendlich einen Befehl an Mach3.exe gesendet. Genau dies möchte ich nun mit einem Delphi-Programm auch tun. Dann habe ich noch ein Codeschnipsel gefunden, welcher für das Connecten und Disconnecten verantwortlich ist:
Code:
Es wird also irgendwie mit "Mach4.Document" verbunden wenn ich das richtig verstehe (?).
void CMachRemoteDlg::OnBnClickedConnect()
{ LPUNKNOWN lpUnk; LPDISPATCH lpDispatch; COleException e; HRESULT res; if (CLSIDFromProgID(OLESTR("Mach4.Document"), &clsid) != NOERROR) { return; } if (res = GetActiveObject( clsid, NULL, &lpUnk) == NOERROR) { HRESULT hr = lpUnk->QueryInterface(IID_IDispatch, (LPVOID*)&lpDispatch); lpUnk->Release(); if (hr == NOERROR) { mach4.AttachDispatch(lpDispatch, TRUE); lpDispatch = mach4.GetScriptDispatch(); scripter.AttachDispatch(lpDispatch, TRUE); } connected = true; m_Status = "Connected to Mach3."; UpdateData(false); SetTimer( 1, 200, NULL ); return ; } m_Status = "No Connection to Mach3."; UpdateData(false); } //this disconnects from Mach3. void CMachRemoteDlg::OnBnClickedDisconnect() { scripter.DetachDispatch(); //detach the scripter object mach4.ShutDown(); //then shutdown MAch3's interface.. <---- Hier das oben genannte ShutDown() m_Status = "No Connection to Mach3."; connected = false; } Brauche ich nun noch mehr Informationen, damit ich erfolgreich mit Mach3.exe kommunizieren kann, oder ist in den beiden Codeschnipsel alles enthalten was ich brauche? Wie muss ich nun genau vorgehen? Für Antworten wäre ich extrem dankbar. mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz