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


von Andreas H. (andy61)


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

von Andreas H. (andy61)


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

von Wolfram (Gast)


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.

von Andreas H. (andy61)


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.

von Wolfram (Gast)


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.





von Andreas H. (andy61)


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.

von Wolfram (Gast)


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?

von Andreas H. (andy61)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Andreas H. (andy61)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Andreas H. (andy61)


Lesenswert?

Danke für Eure Hilfe!

Werd dann mal einen Versuch wagen.

Wünsche Noch einen schönen Abend.

von rene (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.