Avatar billede lau_r Nybegynder
25. september 2003 - 16:05 Der er 27 kommentarer og
2 løsninger

problemer med oversættelse af C++ kode til C#

Jeg er ved at omskrive følgende kode fra C++ til C#:
CString m_Serial = "com4";
bool m_contReceiveMode = false;
RANDLE hComm;

hComm = CreateFile{m_Serial.GetBuffer{), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);

if (hComm == INVALID_RANDLE_VALUE)
{
GENERIC READ I
}
else {
COMMTIMEOUTS noblock;
DCB dcb;
-----------------------------------------
CString og bool giver sig selv, men hvad er RANDLE??
Og hvad svarer GetBuffer{) til?
Avatar billede arne_v Ekspert
25. september 2003 - 16:08 #1
Jeg er 99% sikker på at det er en tyrk-fejl og skal være HANDLE
d.v.s. en pointer til et objekt.
Avatar billede arne_v Ekspert
25. september 2003 - 16:15 #2
Medmindre write through er kritisk så noget i retning af:

FileStream hComm = File.Open(?, FileMode.Open, FileAccess.Write);
Avatar billede lau_r Nybegynder
25. september 2003 - 16:19 #3
hvordan oversætter jeg det til C#?
Skal jeg bruge IntPtr?

public IntPtr Handle;
Handle= CreateFile{m_Serial.GetBuffer{), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);

Og kan jeg oversætte CreateFile med FileStream?
Avatar billede arne_v Ekspert
25. september 2003 - 16:26 #4
CreateFile er Win32 API.

File.Open er .NET.

Ikke helt det samme men tæt.

Der er en del klasser i System.IO namespace.

Det er meget svært at sige hvad er rigtigt uden at vide hvad koden
skal bruges til og hvordan du vil lave det i C#.
Avatar billede lau_r Nybegynder
25. september 2003 - 16:29 #5
jeg skal tilgå en RFID-læser tilsluttet en CF-Port i en PDA.
Avatar billede lau_r Nybegynder
25. september 2003 - 16:31 #6
Er det korrekt at CString bare er en String? og hvad svarer  GetBuffer{) så til?
Avatar billede arne_v Ekspert
25. september 2003 - 16:37 #7
CString er en MFC streng og du kan roligt bruge .NET string til den.
Avatar billede arne_v Ekspert
25. september 2003 - 16:39 #8
GetBuffer henter en LPTSTR ud af CString. Det er nødvendigt fordi
CString er MFC og CreateFile er Win32 API.

Ikke nødvendigt i .NET !
Avatar billede arne_v Ekspert
25. september 2003 - 16:39 #9
Og jeg må tilstå at jeg ikke aner hvad en RFID-læser er.

:-(
Avatar billede lau_r Nybegynder
25. september 2003 - 16:46 #10
RFID er stregkodelæserens afløser. Du kan læse lidt om det her: http://www.ems-rfid.com/whatisrfid.html
Avatar billede lau_r Nybegynder
25. september 2003 - 17:03 #11
Hvordan kan jeg oversætte dette:
hComm == INVALID_RANDLE_VALUE
hComm.ToString() giver bare "System.IO.FileStream" og ikke indholdet af hComm
Avatar billede arne_v Ekspert
25. september 2003 - 17:10 #12
Det skal nok slet ikke oversættes.

Sæt en try catch omkring fordi File.Open smider en exception hvis det
ikke går godt.
Avatar billede lau_r Nybegynder
25. september 2003 - 17:32 #13
Tak for hjælpen så langt.
nu har jeg problemer med:
COMMTIMEOUTS noblock;
DCB dcb;
Hvad er DCB???
Du får lige resten af den kode jeg er ved at omskrive:
---------------------------------------------------------------


13.56 MHz RF PC Handheld Reader Module, Version 0.1
II set communication timeout

GetCommTimeouts(hComm, &noblock) ;
timeouts

if (m_contReceiveMode == false) {
II get communication

II get answer (ReadFile waits for answer II use timeouts, because it is easier to

noblock.ReadTotalTimeoutConstant = 2000;
timeout

noblock.ReadTotalTimeoutMultiplier = MAXDWORD;
noblock.ReadIntervalTimeout = MAXDWORD;

} else {

II get answer for polling (immediate return from ReadFile)

noblock.ReadTotalTimeoutConstant = 0;
noblock.ReadTotalTimeoutMultiplier = 0;
noblock.ReadIntervalTimeout = MAXDWORD;
}

if (SetCommTimeouts(hComm, &noblock) == 0)
II set communication timeouts

    printf("error\n") ;

II set communication state

GetCommState(hComm, & dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fParity = FALSE;
dcb.StopBits = ONESTOPBIT; dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;

if (SetCommState(hComm, &dcb) == 0)
    printf("error\n") ;
}
1* type in your application here*1
II close communication and free handle CloseHandle(hComm);
Avatar billede arne_v Ekspert
25. september 2003 - 18:01 #14
En DCB må være sådan en her:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/dcb_str.asp

og jeg aner ikke hvad sådan en er i C# .NET !
Avatar billede lau_r Nybegynder
25. september 2003 - 18:48 #15
Avatar billede arne_v Ekspert
25. september 2003 - 18:58 #16
Det lyder da lovende.
Avatar billede lau_r Nybegynder
26. september 2003 - 10:00 #17
Jeg har fundet DCB under Windows CE .NET, men har lidt problemer med at finde ud af hvad der skal til for at kunne benytte den.

Requirements:
OS Versions: Windows CE 1.0 and later.
Header: Winbase.h.

Hvad er en Header?
Avatar billede arne_v Ekspert
26. september 2003 - 10:07 #18
Header er bare en .h fil !
Avatar billede lau_r Nybegynder
26. september 2003 - 10:08 #19
hvordan bruger jeg den?
Avatar billede arne_v Ekspert
26. september 2003 - 10:18 #20
C/C++:

#include "winbase.h"

C#:

Skal laves helt anderledes.
Avatar billede lau_r Nybegynder
26. september 2003 - 12:24 #21
øhhh.... tak???
Avatar billede arne_v Ekspert
26. september 2003 - 13:06 #22
Det var ikke for at være uhøflig.

Men at kalde unmanaged code fra C# er et stort område.

Og jeg har aldrig selv prøvet.

Men her er ihvertfald et link:
http://www.c-sharpcenter.com/Tutorial/UnManaged.htm
Avatar billede lau_r Nybegynder
26. september 2003 - 14:28 #23
det er ok :)
Det er lykkedes mig at få kontakt med læseren, men den giver nogle mærkelige resultater. Ij9v osv... kan det være hexidecimale tal? hvordan kan jeg konvertere det til alm. strings?
Avatar billede lau_r Nybegynder
26. september 2003 - 14:28 #24
argh! browseren oversatte de firkantede symboler til tal.
Avatar billede arne_v Ekspert
26. september 2003 - 23:22 #25
Jeg er lost.

Den slags hardware programmering ligger uden for mit ekspertise område.

Beklager.
Avatar billede arne_v Ekspert
27. september 2003 - 12:23 #26
Og et svar i fald du mener at jeg har hjulpet en lille smule.
Avatar billede finger Nybegynder
02. oktober 2003 - 13:10 #27
hmmm. det lyder som om at kerne i dit problem er at du vil åbne en COM-port gennem C#. er det rigtigt?
Der findes ikke nogle forudbyggede moduler til at kommunikere over COM porten hvorfor alt dette skal programmes selv. jeg har siddet en del med dette problem så jeg har en røvfuld links hvis du er interesseret.
Er du det?
Avatar billede lau_r Nybegynder
03. oktober 2003 - 01:17 #28
ja tak
Avatar billede finger Nybegynder
03. oktober 2003 - 13:29 #29
MSDN vejledning og gratis fungerende program + kode:
http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

banalt, men nødvendigt:
http://www.asciitable.com/

Generelt til forståelse omkring seriel port:
http://www.beyondlogic.org/serial/serial.htm
http://www.beyondlogic.org/serial/serial1.htm
http://www.beyondlogic.org/terminal/terminal.htm
http://www.beyondlogic.org/protocolanalyser/protocolanalyser.htm

et par stykker omkring .NET og seriel porte:
http://www.gotdotnet.com/community/usersamples/Default.aspx?query=rs232

serielport i .NET/C# med brug af ActiveX komponent:
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320


Det var sådan lige hvad jeg kunne huske.
Herudover kan jeg sige at jeg selv har snakket med Microsoft om programmering op imod serielporten i .NET og manglen på en komponent til dette. De oplyser at der i næste version af Frameworket vil være en komponent til dette. Desværre kommer det først til jul næste år :-(

Jeg vil anbefale at tage det første link og bruge hans vejledning. Det gjorde jeg selv og det virker fint når man luger lidt ud i den overskydende funktionalitet. hvis man vil lave et generelt modul fra bunden til dette i .NET er det et Stort arbejde! men det er forskellige moduler gratis og ikke gratis der ligger rundt omkring på nettet.
alternativt kan jeg anbefale den komponent som er beskrevet på linket til devhood.

held og lykke med det.

mvh finger
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester