AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi 64Bit OS -> serielle Schnittstelle benutzen
Thema durchsuchen
Ansicht
Themen-Optionen

64Bit OS -> serielle Schnittstelle benutzen

Ein Thema von AJ_Oldendorf · begonnen am 12. Jan 2010 · letzter Beitrag vom 20. Jan 2010
Antwort Antwort
Seite 2 von 3     12 3      
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#11

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 14:01
Ok, ich werde mir das mit den Adminrechten mal angucken aber mal ehrlich, geht dann der empfang der seriellen Schnittstelle nur bis Byte 3 wenn man eingeschränkte Rechte evtl. hat?
Kann ich mir nur schwer vorstellen...
Wo sehe ich denn am besten, ob ich wirklich Adminrechte habe?

Viele Grüße
Alex
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#12

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 14:50
Zitat von AJ_Oldendorf:
Ok, ich werde mir das mit den Adminrechten mal angucken aber mal ehrlich, geht dann der empfang der seriellen Schnittstelle nur bis Byte 3 wenn man eingeschränkte Rechte evtl. hat?
Kann ich mir nur schwer vorstellen...
Wo sehe ich denn am besten, ob ich wirklich Adminrechte habe?

Viele Grüße
Alex

Hallo AJ_Oldendorf, das Problem ist, Du arbeitest mit einem 64 Treiber, dieser wird mit
CreateFileA (NullStr, verwendet. Nun ist dieser Treiber jedoch 64 Bit, und Du greifst mit einer 32 Bit Applikation drauf zu.

Also 32 Bit Treiber 32 BIt Software, 64 Bit Treiber 64 Bit Software.

Möglichkeit, die Comports Sourcen mit FPC 64 Bit compilieren.

Lazarus bietet eine dementsprechende 64 BIt IDE

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 15:09
Der Treiber für den seriellen Port ist sowas von egal - also selbst das OS ist egal ob es 32 oder 64 Bit ist. Wenn er einen COM Port öffnet mit \\.\COMxx und CreateFile(), dann kann er den öffnen. Dabei ist die WinAPI immer die passende - bei einer 32 Bit Anwendung auf einem 64 Bit OS halt der Win32 Layer. Da gibt es grundlegend keine Unterschiede und keine Besonderheiten.

Ich nutze selbst die serielle Schnittstelle und entwickle sogar unter einem 64 Bit Windows mit 32 Bit Delphi eine 32 Bit Windows Anwendung und die läuft komplett ohne Admin Rechte. Selbst Delphi braucht für seinen Debugger bei seiner eigenen Tochterprozess die UAC zu befragen, das geht so.

Grundlegend würde ich bei der Overlapped Methode vor allem alle Rückgabewerte der WinAPI Funktionen beobachten und schauen ob du dort entsprechende Fehlerhinweise bekommst. Meine serielle Kommunikation ist simpel gehalten: In einem zentralen Thread wird die I/O gehandhabt Sleep und GetCommState() um zu schauen ob Daten anliegen. Da du bei OVERLAPPED ja Events und ähnliches anlegen musst, hast du schonmal deren Anlegung geprüft und verfolgt? Vor allem Rückgabewerte beachten...
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#14

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 15:16
Ich war grad schon erschrocken, dass es wirklich so sein sollte wegen dem 64Bit Treiber und 32Bit Delphi usw. Das konnte ich mir nicht vorstellen und danke Muetze1 dass du mir das bestätigt hast.

Ja, die Events werde alle sauber angelegt und bearbeitet.
Das komische ist ja, dass nur die ersten 2 Bytes in den ReceivedBytes richtig sind (ich weiß was an Daten kommen müsste) und ab dem 3ten Byte steht nur noch "Mist" drinne...
Habe gerade den Test auch unter Vista 64bit gemacht. Da gehts auch nicht.

Also:

Vista 64 bit, Win7 64 bit -> funktioniert nicht (-> Datenmüll)
Win200, Win XP, Win Vista, Win7 (alle 32 bit) -> funktionieren
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#15

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 16:16
Zitat von Muetze1:
- bei einer 32 Bit Anwendung auf einem 64 Bit OS halt der Win32 Layer.
Jupp, Mein Fehler Sorry.

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 12. Jan 2010, 20:28
Zitat von Astat:
Jupp, Mein Fehler Sorry.
Kein Problem, aber ich wollte AJ_Oldendorf nicht in seinem Schweiße baden lassen...

Zitat von AJ_Oldendorf:
Vista 64 bit, Win7 64 bit -> funktioniert nicht (-> Datenmüll)
Win200, Win XP, Win Vista, Win7 (alle 32 bit) -> funktionieren
Könntest du vllt. ein Kopie des Projektes machen und mal den ganzen OVERLAPPED Kram rauswerfen und das rein threadbasierend machen? Grundlegend ist der OVERLAPPED Zugriff ein wenig komplizierter und es könnten sich dort ungewollt Fehler verstecken die entweder durch den Win32 Layer hervortreten oder doch sogar durch ihn verursacht werden.

(Kopie, weil das nur ein Test ist. Ich habe mich bisher immer um das OVERLAPPED gedrückt und bin bisher immer gut gefahren. Meine Anwendungen haben bisher auch keine Probleme auf den von dir aufgezählten Systemen)

Ansonsten hast du auch schonmal mit dem PortMonitor von SysInternals die Kommunikation betrachtet? Kommen dort alle Daten richtig an bzw. vermeldet er dort irgendwelche fehlgeschlagenen Aufrufe zu deinem Prozess?
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#17

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 13. Jan 2010, 08:35
Danke erstmal für deine Anregungen.
Das alles rauszunehmen wird ein haufen Arbeit. Muss ich mal prüfen ob das so einfach geht.
Allerdings kommt mir langsam der Eindruck, dass noch niemand mit Overlapped Strukturen gearbeitet hat auf einer 64bit Plattform.
Da es bei allen 32bit Plattformen funktioniert, denke ich fast mal, dass doch ein Fehler beim Win32 Layer vorliegt.
Wisst ihr, wo ich evtl. auf einer Microsoft Seite (kann auch englisch sein) ein entsprechenden Eintrag machen kann, sodass sich vielleicht jemand diesem Problem annimmt? (knowledge base)

Den PortMonitor von SysInternals gucke ich mir mal an. Habe ich noch keine Erfahrung mit.

Viele Grüße
Alex
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#18

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 13. Jan 2010, 09:55
Die Async Professional nutzt auch die Overlapped Methode. Da dein Programm anscheinend sehr umfangreich ist, könntest du erstmal das Demoprogramm von Async Professional nutzen bzw. dir eins zusammen bauen. Wenn dies auch das Problem hat, dann ist wohl MS Schuld, ansonsten deine Implementierung. Grundlegend ist die Wahrscheinlichkeit eines Fehler im Win32 Layer recht gering, weil ansonsten müssten viele namenhafte Hersteller schon Probleme vermeldet haben. Die ComPort Library ist auch eine Delphi Komponente welche die Overlapped Struktur nutzt. Diese hat auch Examples mit bei und kann zum generellen Test genutzt werden.
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#19

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 13. Jan 2010, 10:31
Hab mir mal die ComPort Library angeguckt und eine Exe erzeugt.
Nur wie kann man da in dem Terminalfenster einen String eingeben damit dieser an die serielle Schnittstelle geschickt wird?
Sehe ich dann auch, was zurück kam von der Schnittstelle?
Irgendwie erschließt sich das Programm mir nicht ganz...

Viele Grüße
Alex
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#20

Re: 64Bit OS -> serielle Schnittstelle benutzen

  Alt 13. Jan 2010, 14:02
Also unter Examples\Delphi\ gibt es ein ComExample.dpr Projekt. Dieses hat ein großes Memo welches die empfangenen Zeichen darstellt und rechts ein TEdit mit dem Send Button zum Senden von Daten an die Schnittstelle. Ich habe Version 3.10 geladen, da ich kein D2010 derzeit nutze und somit die Anpassung an dieses nicht benötige.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:27 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