mikrocontroller.net

Forum: PC-Programmierung Event aus dll an Hauptprogramm senden (Delphi)


Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich habe mir in Delphi Programmierroutinen für die Renesas Controller 
der H8 Familie geschrieben.

Nun möchte ich die Funktionen auch in anderen Programmiersprachen 
verwenden.
Hat mir jemand einen Tip, wie ich mit möglichst geringem Aufwand die 
Routinen in VB, C++ C# usw. zur Verfügung stellen kann und worauf ich 
dabei achten muss? (Dll, ActiveX, COM...)

Ich weiss auch noch nicht, wie ich die diversen Ereignisse während dem 
Programmiervorgang (Statusmeldungen, Fehlermeldungen und Fortschritts- 
Anzeige) aus dem Modul an das Hauptprogramm übergeben soll.

Für jeden Tip bin ich sehr dankbar.

Gruss Andy

Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir wirklich niemand helfen? Es eilt und der Chef sitzt mir schon 
im Nacken mit dem Termin.

Bin sehr dankbar für Eure Hilfe.

Gruss Andy

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist unklar was deine Frage ist.
>Nun möchte ich die Funktionen auch in anderen Programmiersprachen
>verwenden.
>Hat mir jemand einen Tip, wie ich mit möglichst geringem Aufwand die
>Routinen in VB, C++ C# usw. zur Verfügung stellen kann und worauf ich
>dabei achten muss? (Dll, ActiveX, COM...)
Antwort: (Dll,ActiveX,COM, ... = .Net)
Die Antwort steht schon in der Frage!

>Ich weiss auch noch nicht, wie ich die diversen Ereignisse während dem
>Programmiervorgang (Statusmeldungen, Fehlermeldungen und Fortschritts-
>Anzeige) aus dem Modul an das Hauptprogramm übergeben soll.
Antwort: bei .Net und COM Ereignisse(Events), bei DLL CallBack Routinen
Steht ebenfalls schon in der Frage...
Was ist die Frage???
Willst du jetzt hören, das bei Verwendung von VB6 nur Singlethreaded 
Apartments angesagt sind oder soll für Dich jemand der nicht genau weiß 
was du tust und kannst, für dich eine der Möglichkeiten auswählen?

>Kann mir wirklich niemand helfen? Es eilt und der Chef sitzt mir schon
>im Nacken mit dem Termin
Wenn dein Chef Dir im Nacken sitzt dann mach es auf die Weise wie du es 
bisher auch gelöst hast.

Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfram

Danke für Deine Antwort.

Bei der ersten Frage meinte ich, welche der ganannten Möglichkeiten(Dll, 
ActiveX usw) die gebräuchlichste und universellste ist.
Ich habe noch nie sowas gemacht, da ich meine PC-Programme bis jetzt 
immer ausschliesslich in Delphi und für mich geschrieben habe.
Ich möchte das ganze jetzt nicht in eine Dll packen, wenn die ganze Welt 
vielleicht ActiveX Komponenten einsetzt.

Ausserdem habe ich wirklich keine Ahnung, wie man ein Event aus einem 
externen Modul an ein Hauptprogramm übergibt.
Der Ausdruck CallBack Routine ist ja schon mal ein Anfang um weiterzu 
kommen (falls ich mich dann für die Dll Variante entscheide)

"Wenn dein Chef Dir im Nacken sitzt dann mach es auf die Weise wie du es
bisher auch gelöst hast?!?"

Hatte das Problem ja bisher noch nie.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine DLL wird das so oder so auch bei ActiveXCOM Objekt. Mit DLL ist 
reine WindowsDLL gemeint.
Die Frage ist was für einen "Idioten" erwartest du auf der anderen 
Seite.
Oder Für wie "kompetent" hältst du die Programmierer die es einsetzen?
DLL Variante:
Vorteil: du könntest deine Funktionen unmittelbar nach außen geben.
Nachteil: wenn deine Funktionen nicht abgesichert sind oder der Nutzer 
die Doku nicht versteht und Funktionen in "ungünstiger" Weise/Abfolge 
benutzt, kracht es. Für VB Programmierer musst du wahrscheinlich gleich 
noch die
"Header Datei rausgeben die die Kapselung macht. Für C Programmierer 
würde ich die Headerdateien rausgeben. Wichtig keine unüblichen 
Datentypen verwenden!

COM Objekt:
Vorteil: Durch Darstellung als Objekt kannst du ungünstige 
Befehlsabfolgen absichern. Jedes Programm/Programmierer kann damit 
umgehen.
Nachteil: Das Objekt musst du entwerfen, inklusive Abstraktion und Doku 
der Verwendung der einzelnen Member. Wichtig nur COM Datentypen 
verwenden!

ActiveX Komponente:
Vorteil: auch für "absolute Idioten" benutzbar,da sich dein 
Flashprogramm
im günstigsten Fall im Fenster der Anwendung präsentiert. Also sowas wie 
Datei auswählen und ein Flashbutton.

Wie das ganze in Delphi geht, keine Ahnung habe es bisher nur in VB und 
C++ gemacht. Sollte aber eigentlich ähnlich einfach sein. Ich schätze 
den Aufwand zum erstellen eines einfachen Test COM Objektes/Controls auf 
unter
1Tag analog VB wenn man sich nicht auskennt aber den Rest beherrscht.





Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Wolfram

Herzlichen Dank für Deine Ausführungen!

Ich habe gegen aussen nur eine Funktion.
In den Parametern übergebe ich dann Werte wie: CPU Familie, CPU Typ, 
Quarzfrequenz, Baudrate usw. und natürlich das zu Programierende Hex- 
File.
Damit läuft dann der ganze Programmiervorgang selbständig ab.

Während der Programmierung fallen dann in meinen Routinen Status und 
Fehlermeldungen an.

Vielleicht kannst Du mir noch einen Tip geben, wie ich dann aus dem 
Hauptprogramm rechtzeitig an diese Daten komme? (Dll- Variante)
Habe mal einen Versuch gemacht über eine StringListe, wo alle Events 
reingeschrieben wurden. Über einen Timer habe ich dann im Hauptprogramm 
diese StringListe dauernd ausgelesen und ein Memo Fenster damit 
gefüttert.
(Sicher die nicht die korrekte Methode)

Wahrscheinlich ist es aber das einfachste, die ganze Geschichte in eine 
ActiveX Komponente zu packen. Ich hoffe, ich blicke damit durch.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe gegen aussen nur eine Funktion.
>In den Parametern übergebe ich dann Werte wie: CPU Familie, CPU Typ,
>Quarzfrequenz, Baudrate usw. und natürlich das zu Programierende Hex-
>File.
>Damit läuft dann der ganze Programmiervorgang selbständig ab.
dann mach es mit einer Funktion, die am Schluß sagt hat geklappt oder 
hat nicht geklappt und warum nicht, dafür reicht die normale DLL. Wozu 
brauchst du da noch events?

Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ganze Programmiervorgang dauert bei grossen hex- Files recht lange.
Es wäre nett, den User während dieser Zeit nicht im ungewissen zu 
lassen, ob alles I.O ist.

Ein Progress Bar für den Fortschritt während dem Download wäre auch ganz 
nett.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So etwas geht aber nur, wenn entweder die in der DLL vorhandene Funktion 
die Messageloop bedient und gelegentlich Nachrichten absetzt oder aber 
die in der DLL vorhandene Funktion in einem eigenen Thread läuft.

Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem eigenen Thread hört sich gut an.
Jetzt muss ich nur noch herausfinden, wie ich die Messages an das 
Hauptprogramm übergeben kann.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit PostThreadMessage, das ist eine Win32-API-Funktion.

Damit die weiß, wohin sie ihre Nachrichten zu posten hat, musst Du beim 
Aufruf Deiner Funktion das betreffende Fensterhandle übergeben.

Autor: Andreas Häusler (andy61)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Hilfe!

Werd dann mal einen Versuch wagen.

Wünsche Noch einen schönen Abend.

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas Haeusler,
bei Delphi problemen sollte man sich an die Delphi community wenden. 
Ddie ist 24 Stunden auf dem borland server :

news://newsgroups.borland.com/....

Die Auswahl ist ersichtlich unter..
http://support.borland.com/entry.jspa?entryID=292
http://support.borland.com/entry.jspa?externalID=1175

weiter benoetigt man einen Newsreader, wie zB
thunderbird, oder ...

Auf den Newsfgroups hat es wirklich tonneweise kompetente Leute. Eine 
Antwort ist meist innert Minuten da. Alles andere ist Schrott.

Die Firma heisst nun Codegear, ein Managements furtz.

http://www.codegear.com

Rene

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.