AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit WriteFile für die COM-Schnittstelle
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit WriteFile für die COM-Schnittstelle

Ein Thema von gsh · begonnen am 31. Mai 2006 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Problem mit WriteFile für die COM-Schnittstelle

  Alt 31. Mai 2006, 08:01
Hi DPler

Ich hab ein Problem mit WriteFile für die COM-Schnittstelle
Ich verwende für die COM Schnittstelle die Unit UCOM (nicht die Komponente)

Jetzt hab ich mir eine Prozedur geschrieben die vier Byte nacheinander sendet und beim vierten Byte gibt es einen access fehler (schreiben auf adresse: zugriff verweigert)

Delphi-Quellcode:
procedure TCOMThread.SendData(Speicherpos : integer; Data : Char);
const
  cSleepTime = 10;
var
  DPTR, DPH, DPL : String;
  Command : String;
  TempChar : PChar;
begin
  DPTR := IntToBin(Speicherpos, 16);
  DPH := copy(DPTR, 1, 8);
  DPL := copy(DPTR, 9, 8);
  COMPort.SendString(#64);
  sleep(cSleepTime);
  COMPort.SendString(PChar(IntToStr(BinToInt(DPH))));
  sleep(cSleepTime);
  COMPort.SendString(PChar(IntToStr(BinToInt(DPL))));
  sleep(cSleepTime);
  TempChar := PChar(Data);
  COMPort.SendString(TempChar); //<--- Hier kommt die Fehlermeldung
end;
Die Unit:
Delphi-Quellcode:
procedure TCOM.SendString(const Buffer: PChar);
var BytesWritten: DWord;
begin
  WriteFile(PortHandle, Buffer^ ,Length(Buffer) ,BytesWritten ,NIL);
  Inc(COMThread.ComSendedBytes);
end;
Der Aufruf der Prozedure:
SendData(AktSpeicherPos, DataField[Y, X]); Konnt ihr mir helfen?
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit WriteFile für die COM-Schnittstelle

  Alt 31. Mai 2006, 08:11
Hallo Alex,

die Prozedur SendString() erwartet eine implizite Längenangabe für den Buffer. Diese ist nur gegeben, wenn du PChar(String) übergibst, nicht bei PChar(Char). Also versuche es so:

Delphi-Quellcode:
procedure TCOMThread.SendData(Speicherpos : integer; Data : Char);
var
  TempChar : String;
begin
  // ...
  TempChar := Data;
  COMPort.SendString(PChar(TempChar));
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Problem mit WriteFile für die COM-Schnittstelle

  Alt 31. Mai 2006, 08:17
Du erzeugst mit PChar(Data) einen Zeiger auf den Char Data. SendString sendet aber einen nullterminierten C-String.
Die Terminierung des Strings, sprich das 0-Byte das auf Data folgen sollte, fehlt hier aber.
Delphi-Quellcode:
var
  DSTR: array [0..1] of Char;
begin
  DSTR[0] := Data;
  DSTR[1] := #0;
  COMPort.SendString(@DSTR[0]);
end;
marabu's Losung ist meiner aequivalent, nur das ich es zu Fuss mache waehrend die Zuweisung eines Chars an einen string von Delphi intern gehandhabt wird.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: Problem mit WriteFile für die COM-Schnittstelle

  Alt 31. Mai 2006, 10:11
ahh
sowas hab ich mir gedacht (deshalb der versuch mit TempChar) ich hab nur keine Lösung gefunden

So müsste es doch auch gehen oder?
Delphi-Quellcode:
procedure TCOMThread.SendData(Speicherpos : integer; Data : String);
begin
//[..]
  COMPort.SendString(PChar(Data));
end;
oder MUSS ich über TempChar gehen?

Das problem ist das ich des zur Zeit nicht testen kann ... der Prozzesor ma zur zeit nicht gern aber des ist ein anderes Problem
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Problem mit WriteFile für die COM-Schnittstelle

  Alt 31. Mai 2006, 10:18
So geht das.

marabu
  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 05:40 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