Forum: PC-Programmierung Virtuelle COM als DLL


von Ralf G. (old-school) Benutzerseite


Lesenswert?

Hallo

gibt es eine DLL mit der ich eine Virtuelle COM erzeugen kann ?

Ich habe eine alte Software die nur über eine COM Geräte steuern kann,
möchte nun so eine Art GeräteDummy schreiben, um die Steuerung an 
aktuelle Hardware anzupassen.

Gruss Ralf

von N. Tesla (Gast)


Lesenswert?

Geht auch ohne DLL, nur ein wenig Hardware:

Man nehme einen PC mit drei COM Ports und läßt dem ollen Progi seinen 
RS232-Datenstrom auf den ersten COM Port los. Über ein Nullmodemkabel
fängt man die Daten via zweiten Port auf, bearbeitet sie mit dem neuen 
Progi und schickt via dritten Port zur Zielhardware. Ganz einfach, 
nicht?

von moin (Gast)


Lesenswert?

N. Tesla schrieb:
> Geht auch ohne DLL, nur ein wenig Hardware:

Geht auch ohne Hardware:
Mit com0com und hub4com (-> http://com0com.sourceforge.net/) lassen sich 
virtuelle COm Ports einrichten, die sich auch anzapfen lassen.

gruss

von old-school_offline (Gast)


Lesenswert?

@ N. Tesla

das ist pure Hardware verschwendung, da ist die COM0COM Lösung doch 
schon eleganter ... aber auch nicht unbedingt das was ich suche

ich habe jetzt schon nach COM >> socket Lösungen gesucht und getestet
funktioniert aber alles nicht so richtig ...

Gruss Ralf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

old-school_offline schrieb:
> aber auch nicht unbedingt das was ich suche

Nicht? Dann beschreib doch mal genauer, was Du suchst, das ist aus 
Deiner bisherigen Beschreibung nämlich nicht zu entnehmen. Was fehlt Dir 
bzw. was stört Dich an com0com?

von Ralf G. (old-school) Benutzerseite


Lesenswert?

@ Rufus Τ. Firefly

>> Nicht? Dann beschreib doch mal genauer, was Du suchst ...

ich suche eine Virtuelle COM die über eine API(DLL) angesprochen werden 
kann, also quasi direkt, ohne die Umwege einer umgelenkten zweiten COM 
oder einer IPSocket-Verbindung.

Gruss Ralf

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> ich suche eine Virtuelle COM die über eine API(DLL) angesprochen werden
> kann, also quasi direkt, ohne die Umwege einer umgelenkten zweiten COM

dann kann nicht gehen, dafür braucht man einen Systemtreiber und dort 
Programmiert man soetwas nicht rein.

Aber mit dem com2com brauchst du nicht mal eine DLL und kannst einfach 
so programmieren.

von Ralf (Gast)


Lesenswert?

Das was du suchst dürfte beispielsweise hier zu finden sein:
http://www.eltima.com/products/ -> unter "Developer Software" das 
'Virtual Serial Port ActiveX'
http://www.eterlogic.com/Products.VSPE.html
http://www.fabulatech.com/products.html#serial

Was das Com2Com angeht, nette Idee, aber es wäre halt schon schön, 
wenn's das eben in der o.g. Form gibt: Eine DLL o.ä., mit der man einen 
VCP erzeugen kann.

Ralf

von Ralf G. (old-school) Benutzerseite


Lesenswert?

@ Ralf
mit AktivX habe ich noch nicht gearbeitet ...
deine Links schaue ich mir mal in ruhe an.

> Was das Com2Com angeht, nette Idee, aber es wäre halt schon schön,
> wenn's das eben in der o.g. Form gibt: Eine DLL o.ä., mit der man einen
> VCP erzeugen kann.

sehe ich auch so ...

@ Peter II
> dann kann nicht gehen, dafür braucht man einen Systemtreiber und dort
> Programmiert man soetwas nicht rein.

aber es könnte doch ein Gerätetreiber(virtuelle COM) geben der über eine 
DLL angesprochen werden könnte ...

Gruss Ralf

von Ralf G. (old-school) Benutzerseite


Lesenswert?

Die Links von Ralf(Gast) sehen doch schon sehr vielversprechend aus ...

http://www.eterlogic.com/Products.VSPE.html

> Virtual device: connector
> Virtual device: data splitter
> Virtual device: pair
> Mapper device
> User mode device: TcpServer
> User mode device: TcpClient
> User mode device: Serial Redirector
> User mode device: UDP Manager
> User mode device: Bridge
> Python scripting system
> x86 and x86_64 processor architecture support
> VSPE API (C/C++ header and static library) for native language
> VSPE API Python bindings for Python developers
> Embedded HTTP server
> Data monitoring

> Virtual Serial Ports Emulator is a FREEWARE program on 32 bit
> platform and can be used absolutely free for any purpose.




http://www.fabulatech.com/products.html#serial

> Virtual Serial Port Control
> Virtual Serial Port Control is a developer component which makes it
> possible to create and control virtual serial ports. The program is
> accessible over ActiveX control, Net or DLL.
> It entirely replaces hardware serial ports and hardware COM devices.
> Virtual COM ports created with Virtual Serial Port Control fully emulate
> hardware serial ports.

kostet aber 2000$

Gruss auch Ralf

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> aber es könnte doch ein Gerätetreiber(virtuelle COM) geben der über eine
> DLL angesprochen werden könnte ...
ja aber wozu sollte man noch ein dll brauchen wenn ein schon eine 
einheitliche Schnittstelle (com) gibt?

Was soll da noch der vorteil von dll sein?

von db8fs (Gast)


Lesenswert?

Mach doch 'ne DLL, die auf den physischen COM-Port zugreift und über 
eine API 'ne Anzahl von NamedPipes zur Verfügung stellt. Auf die 
NamedPipes haste dann  Zugriff wie auf 'nen COM-Port, nur dass du eben 
nicht "\\.\COMn" als Filename nimmst, sondern "\\.\pipe\<name><nr>", 
z.B. "\\.\pipe\VCP1". Dann kannste mittels ReadFile(), WriteFile() ganz 
normal auf dem Handle operieren wie mit 'nem seriellen Port auch. Wird 
auch von der libC zur Verfügung gestellt, die Funktion schimpft sich da 
eben "pipe()" und liefert 'nen FileDescriptor zurück.

VirtualBox kann sowas z.B. machen um die COM-Ports der VM auf eine Pipe 
des Hosts zu lenken, falls dieser keine UARTs zur Verfügung stellt. Wozu 
man da ein COM-Objekt braucht, seh ich ehrlich gesagt auch nicht ein.

Das bringt natürlich nur was, wenn du Funktionalität trennen oder 
multiplexen willst. Für einfachen Mehrfachzugriff reichen die 
FILE_SHARE_{READ|WRITE} Flags beim CreateFile doch aus.

von Ralf (Gast)


Lesenswert?

Peter II schrieb:
> Ralf G. schrieb:
>> aber es könnte doch ein Gerätetreiber(virtuelle COM) geben der über eine
>> DLL angesprochen werden könnte ...
> ja aber wozu sollte man noch ein dll brauchen wenn ein schon eine
> einheitliche Schnittstelle (com) gibt?
>
> Was soll da noch der vorteil von dll sein?

Naja, wenn man beispielsweise (alte) Software hat, die eine 
COM-Schnittstelle voraussetzt, man aber über eine eigene Software die 
Daten reinfüttern will.

Ralf

von Ralf G. (old-school) Benutzerseite


Lesenswert?

@  Peter II
> ja aber wozu sollte man noch ein dll brauchen wenn ein schon eine
> einheitliche Schnittstelle (com) gibt?

Noch mal ... ich möchte ein Gerät das an einer COM hängt Simulieren und 
später auf andere Geräte wie auch immer angeschlossen umsetzen  ...
Die vorhandene (alte) Steuersoftware kann nur über COM 
kommunizieren/steuern.
Dafür brauche ich eine Virtuelle COM, die ich möglichst direkt aus 
meiner Software steuern/verwenden will, ohne zusätzliche Tools !


@ Ralf
> Naja, wenn man beispielsweise (alte) Software hat, die eine
> COM-Schnittstelle voraussetzt, man aber über eine eigene Software die
> Daten reinfüttern will.

genau So ist es ... Danke für dein Verständnis ...

Gruss Ralf

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> Dafür brauche ich eine Virtuelle COM, die ich möglichst direkt aus
> meiner Software steuern/verwenden will, ohne zusätzliche Tools !
wenn schreibe dir selber einen Treiber

> @ Ralf
>> Naja, wenn man beispielsweise (alte) Software hat, die eine
>> COM-Schnittstelle voraussetzt, man aber über eine eigene Software die
>> Daten reinfüttern will.

und genau das geht mit com2com

von Ralf (Gast)


Lesenswert?

> und genau das geht mit com2com
Und genau das sehe ich nicht, wie das bei com2com gehen soll, denn 
soweit ich das verstanden habe erzeugt com2com immer zwei 
Schnittstellen, die miteinander verknubbelt sind.

Ralf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf schrieb:
> denn
> soweit ich das verstanden habe erzeugt com2com immer zwei
> Schnittstellen, die miteinander verknubbelt sind.

Ja, das tut es. Aber genau das ist doch das, was Du brauchst, um mit der 
Schnittstelle zu reden: Dein nichtveränderbares Programm bekommt die 
eine davon vorgesetzt, Dein anderes Programm, das den Betrieb der 
Schnittstelle simulieren soll, eben die andere.

Und damit ist die gewünschte Funktionalität erreicht. Da sind keine 
programmiertechnischen Klimmzüge irgendeiner Art erforderlich; damit 
muss nur Dein steuerndes Programm halt auch mit einer seriellen 
Schnittstelle kommunizieren können.

Welchen Sinn hätte es, für eine serielle Schnittstelle noch eine eigene, 
völlig andere und auf dem Planeten sonst nie wieder vorkommende API zu 
entwickeln? Wozu sollte das gut sein?

Du willst mit einem Programm kommunizieren, das eine serielle 
Schnittstelle ansteuert. Also gibst Du dem Programm seine serielle 
Schnittstelle, packst ein Nullmodemkabel dran und hängst Dein steuerndes 
Programm an das andere Ende des Nullmodemkabels. Und genau das macht 
com0com, nur daß dafür keine Hardware mehr erforderlich ist.

von Ralf (Gast)


Lesenswert?

Das stimmt schon, aber es gibt halt Leute die nicht vier VCPs anlegen 
möchten, wenn sie sich beispielsweise dazwischen hängen möchten.
Und andere möchten die Eingangsdaten einer echten Schnittstelle 
modifizieren, bevor sie sie an die Uraltsoftware weiterreichen.

Ralf

von Peter II (Gast)


Lesenswert?

Ralf schrieb:
> Das stimmt schon, aber es gibt halt Leute die nicht vier VCPs anlegen
> möchten, wenn sie sich beispielsweise dazwischen hängen möchten.

keine Angst windows kann auch mit mehr als 10 schnittstellen umgehen

> Und andere möchten die Eingangsdaten einer echten Schnittstelle
> modifizieren, bevor sie sie an die Uraltsoftware weiterreichen.
das ist nun schon wieder etwas ganz anders, und hat nichts mit dem 
ursprünglichen Problem zu tun.


Mit Com2Com hättest du schon einen Lösung für dein Problem, nur weil sie 
etwas unschön ist nimmst du sie nicht? Da scheint das Prblem nicht 
wichtig zu sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf schrieb:
> Das stimmt schon, aber es gibt halt Leute die nicht vier VCPs anlegen
> möchten, wenn sie sich beispielsweise dazwischen hängen möchten.

Dann sieh Dir das com0com-Projekt mal etwas genauer an.

Einerseits gibt es dort auch hub4com, und andererseits auch das von Dir 
anscheinend komplett übersehene com2tcp.

Ansonsten:
Wenn das Aufstampfen und "ich will aber" wichtiger ist als das Finden 
einer praktikablen Lösung, hindert Dich nichts in der Welt daran, Dir 
den Kram so zu entwickeln, wie Du ihn Dir wünschst.

von Robert L. (lrlr)


Lesenswert?

>hindert Dich nichts in der Welt daran, Dir
>den Kram so zu entwickeln, wie Du ihn Dir wünschst

oder 2000$ zu zahlen..

>Und andere möchten die Eingangsdaten einer echten Schnittstelle
>modifizieren, bevor sie sie an die Uraltsoftware weiterreichen.

wo soll hier das Problem mit com0com liegen?
(das hat ja mit der "echten" überhaupt nichts zu tun..)
man ließt von der "echten" (Com1) und schreibt auf die virtuelle (COM15)
die uraltsteuerung hängt man an die 2. virtuelle (com16) welche mit 
COm15 "virtuell" verbunden ist...

usw.

von Ralf (Gast)


Lesenswert?

@Peter II:
> keine Angst windows kann auch mit mehr als 10 schnittstellen umgehen
grins

>> Und andere möchten die Eingangsdaten einer echten Schnittstelle
>> modifizieren, bevor sie sie an die Uraltsoftware weiterreichen.
> das ist nun schon wieder etwas ganz anders, und hat nichts mit dem
> ursprünglichen Problem zu tun.
Der Vorschlag Com2Com aber auch nicht, denn es wurde nach einer DLL o.ä. 
zur Erzeugung eines VCP gefragt und nicht nach einem virtuellen 
Nullmodemkabel ;)

> Mit Com2Com hättest du schon einen Lösung für dein Problem, nur weil sie
> etwas unschön ist nimmst du sie nicht? Da scheint das Prblem nicht
> wichtig zu sein.
Ja, es wäre eine Lösung für sein Problem. Aber vielleicht nicht die, die 
er wollte. Abgesehen davon: wie man hier öfter mal sieht tun sich einige 
schwer mit der UART-Schnittstelle und wie man sie richtig bedient. Daher 
kann ich mir durchaus vorstellen, dass ein VCP, der über eine DLL 
bedient wird eben attraktiver ist - ob die Bedienung der DLL nicht 
genauso ein Gefrickel ist wie die eines VCPs steht auf nem ganz anderen 
Blatt ;)

@Rufus:
> Einerseits gibt es dort auch hub4com, und andererseits auch das von Dir
> anscheinend komplett übersehene com2tcp.
Schön. Er hatte aber nach EINEM VCP gefragt, der durch eine DLL 
zugreifbar ist und NICHT DURCH EINEN ZWEITEN VCP oder ne IP-Adresse oder 
oder oder.

> Ansonsten:
> Wenn das Aufstampfen und "ich will aber" wichtiger ist als das Finden
> einer praktikablen Lösung, hindert Dich nichts in der Welt daran, Dir
> den Kram so zu entwickeln, wie Du ihn Dir wünschst.
Ich behaupte nicht, dass Com2Com nicht praktikabel ist. Ich möchte aber 
mal anmerken, dass du aufstampfst und "aber willst, dass Com2Com die 
Antwort" ist.
Eine mögliche Lösung ist Com2Com, keine Frage. Er hat aber nach nem 
anderen Weg gefragt. Ob er Com2Com nimmt oder sich für einen meiner 
Links entscheidet muss er beurteilen, nicht wir.

@Robert:
> wo soll hier das Problem mit com0com liegen?
Es gibt kein Problem an sich. Einige Leute würden eben einen anderen Weg 
bevorzugen. Nicht mehr hab ich behauptet.
Ich möchte nur mal anmerken, dass es sicherlich funktioniert, wenn man 
dann zwei Schnittstellen bedienen muss bzgl. Buffern, wechselnden 
RTS/CTS/DTR/DSR/etc.-Signalen, aber das ist Schnittstellen-spezifisch. 
Ein VCP, der über DLL angesprochen wird und bei dem man die Daten 
reinschiebt und gut ist, ist für manche einfach attraktiver.
Und ja, ich weiss dass er die Logik und Bedienung der Schnittstelle in 
eine eigene Klasse verpacken kann um das gleiche Ziel zu erreichen - 
aber das muss er dann auch erstmal machen.

Ralf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf schrieb:
> Ich behaupte nicht, dass Com2Com nicht praktikabel ist. Ich möchte aber
> mal anmerken, dass du aufstampfst und "aber willst, dass Com2Com die
> Antwort" ist.

Nö. Da keinerlei Begründung außer "will nicht" gekommen ist, sehe ich 
das anders.

Wären die Forderungen (ja, so muss man das wohl nennen) so detailliert, 
wie Du sie Dir gerade zurechtinterpretiert hast, dann sähe die 
Situation anders aus.

von Ralf (Gast)


Lesenswert?

@Rufus:
> Nö. Da keinerlei Begründung außer "will nicht" gekommen ist, sehe ich
> das anders.
oO Verzeihung, wo habe ich geschrieben "_ich_ will das so nicht"?
Wo hat der Beitragsersteller geschrieben, "_er_ will das so nicht"?

> Wären die Forderungen (ja, so muss man das wohl nennen) so detailliert,
> wie Du sie Dir gerade zurechtinterpretiert hast, dann sähe die
> Situation anders aus.
Was fehlt dir noch an Details? Der Beitragsersteller hat geschrieben, 
dass er's per DLL machen möchte, und die ActiveX Controls die ich 
gepostet hatte kommen der Sache schon recht nahe und näher als Com2Com.
Ich habe da also m.E. nix reininterpretiert.
Wo ich die Zügel locker gelassen habe waren die (teils theoretisch, 
teils praktisch hergeholten) Anwendungsfälle unter dem Gesichtspunkt der 
'Programmierfreundlichkeit', sofern man Wert darauf legt.

Ralf

von Robert L. (lrlr)


Lesenswert?

>gepostet hatte kommen der Sache schon recht nahe und näher als Com2Com.

wirklich?

wenn man sich die 2 anschaut:
Beitrag "Re: Virtuelle COM als DLL"

dann geht es hier nur um das ERSTELLEN/Konfigurieren der Virtuellen com 
ports (zumindest hab ich das so heraus gelesen)

nicht das "auslesen/schreiben" der daten in oder vom Com Port...


beim produkt von eltima
braucht man dann beides:
Serial Port ActiveX
und
Virtual Serial Port ActiveX

??
(wobei ersteres dann erst recht wieder vom virtuellen com port 
liest/schreibt)

von Ralf G. (old-school) Benutzerseite


Lesenswert?

@ Robert L.
>> gepostet hatte kommen der Sache schon recht nahe und näher als Com2Com.
> wirklich?
> wenn man sich die 2 anschaut:
> Beitrag "Re: Virtuelle COM als DLL"
> dann geht es hier nur um das ERSTELLEN/Konfigurieren der Virtuellen com
> ports (zumindest hab ich das so heraus gelesen)
> nicht das "auslesen/schreiben" der daten in oder vom Com Port...

So muss mich auch mal wieder zu Wort melden ...

Ich möchte gerne eine Virtuelle COM über API(DLL) verwenden, also senden 
und empfangen und natürlich auch steuern(konfigurieren) ...

Die COM2COM - Lösung ist mir bekannt und ist NICHT das was ich in erster 
Linie suche !!!

Gruss Ralf G.

von Frank K. (fchk)


Lesenswert?

Ralf G. schrieb:

> Ich möchte gerne eine Virtuelle COM über API(DLL) verwenden, also senden
> und empfangen und natürlich auch steuern(konfigurieren) ...

Nur mit einer DLL gehts nicht. Das Handling findet nämlich nicht im 
Kontext (D)einer Applikation statt, sondern im Kernel Mode. Das ist 
durch das Design von Windows so bedingt und auch so gewollt, und Du 
wirst das nicht ändern können.

> Die COM2COM - Lösung ist mir bekannt und ist NICHT das was ich in erster
> Linie suche !!!

Genau DAS ist aber der von der Windows Systemarchitektur vorgegebene 
Lösungsweg, ob Dir das gefällt oder nicht.

fchk

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> Ich möchte gerne eine Virtuelle COM über API(DLL) verwenden, also senden
> und empfangen und natürlich auch steuern(konfigurieren) ...

was willst du da steuern? RTS, CTS usw geht auch mit der com2com und 
viel mehr kann man da doch gar nicht machen.

von Ralf G. (old-school) Benutzerseite


Lesenswert?

> was willst du da steuern? RTS, CTS usw geht auch mit der com2com und
> viel mehr kann man da doch gar nicht machen.

Dachte da eher an 
Baudrate/Anzahl-DatenBits/Anzahl-StopBits/Parity-Bit/Handshake-Einstellu 
ng

Gruss Ralf

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> Dachte da eher an
> Baudrate/Anzahl-DatenBits/Anzahl-StopBits/Parity-Bit/Handshake-Einstellu

das kann du doch alles über die Virtuelle ComPorts von der Applikation 
einstellen. (bin mir aber nicht sicher ob es überhaupt eine auswirkung 
hat, denn es werden ja keine wirklichen daten mit einem Takt 
übertragen).

von Ralf G. (old-school) Benutzerseite


Lesenswert?

> Nur mit einer DLL gehts nicht. Das Handling findet nämlich nicht im
> Kontext (D)einer Applikation statt, sondern im Kernel Mode. Das ist
> durch das Design von Windows so bedingt und auch so gewollt, und Du
> wirst das nicht ändern können.

wenn ich es richtig gelesen habe  ... sieht WINDOWS eine Verwendung 
einer RS232 über API aber vor ...

in der WIN32 gibt es eine API um mit einer RS232 zu kommunizieren ...

oder die port.dll oder die rsapi.dll ... ist nur eben mit einer echten 
COM

Gruss Ralf

von Peter II (Gast)


Lesenswert?

Ralf G. schrieb:
> wenn ich es richtig gelesen habe  ... sieht WINDOWS eine Verwendung
> einer RS232 über API aber vor ...
>
> in der WIN32 gibt es eine API um mit einer RS232 zu kommunizieren ...
>
> oder die port.dll oder die rsapi.dll ... ist nur eben mit einer echten
> COM

nein - alles Programm die mit einer echten Com umgehen können, können 
auch mit einer Virtuellen umgehen. Für die Programm ist das überhaupt 
kein unterschied. Aus dem Grund kann man auch alte hardware mit alter 
Software für einen USB zum Com adapter betreiben.

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.