AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++ Programm nach Delphi übersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Programm nach Delphi übersetzen

Ein Thema von 100nF · begonnen am 12. Jul 2010 · letzter Beitrag vom 27. Jul 2010
Antwort Antwort
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

C++ Programm nach Delphi übersetzen

  Alt 12. Jul 2010, 21:20
Hallo zusammen,

Ich habe folgendes Problem:
Für eine CNC-Maschine benutze ich das Steuerprogramm Mach3, welches die Maschine direkt über die Druckerschnittstelle ansteuert.

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):
http://www.machsupport.com/downloads/MachRemote.zip

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: C++ Programm nach Delphi übersetzen

  Alt 12. Jul 2010, 21:28
Hast du die tlb?
Markus Kinzler
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#3

AW: C++ Programm nach Delphi übersetzen

  Alt 12. Jul 2010, 21:48
ööhm was soll denn das sein?

Ich hab eigentlich nicht mehr, als das was es auf der angegebenen Homepage zum herunterladen gibt.
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#4

AW: C++ Programm nach Delphi übersetzen

  Alt 16. Jul 2010, 18:53
*push*

kann mir denn keiner helfen
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#5

AW: C++ Programm nach Delphi übersetzen

  Alt 27. Jul 2010, 16:15
Also ich hab mich nochmal bemüht soviel rauszufinden wie ich nur kann.

Hier die vermutlich wichtigsten Codeschnipsel aus dem Beispielprogramm (C++):
Code:
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:
};
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.
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:
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;
}
Es wird also irgendwie mit "Mach4.Document" verbunden wenn ich das richtig verstehe (?).

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz