Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#/C++] memcpy alternatief

Pagina: 1
Acties:

  • TripleQ
  • Registratie: Juni 2004
  • Niet online
Hallo Experts,
Ik ben nu al 2 avonden aan het zoeken naar onderstaande,

Ik wil een gedeelte van een c++ programma omtoveren naar c#.

Er komen in de WndProc messages binnen die ik wil afvangen.
Dat afvangen lukt mij al in c# en ik krijg de WPARAM en de LPARAM goed binnen.

Maar dat die zijn van het type Integer, en in de c++ code wordt er het volgende commando gegeven.
'
code:
1
memcpy(&touchW, &wParam, sizeof HTCTOUCH_WPARAM);


Hiermee wordt de wParam parameter omgetoverd naar een struct die ergens anders is gedefineerd.

code:
1
2
3
4
5
6
7
8
typedef struct tagHTCTOUCH_WPARAM
{
    BYTE Up;    //0=KeyDown,1=KeyUp
    BYTE Where; //Where the click occurs (left pane, wheel, right pane)
                //Pos for the Right Pane click
    BYTE xPosRP;
    BYTE yPosRP;
} HTCTOUCH_WPARAM;


Nou zo'n struct defineren in c# lukt mij ook nog wel,
maar hoe krijg ik in godsnaam die integer omgetoverd naar die struct?

Nu heb ik natuurlijk al 2 avonden lopen zoeken,
en de enige opties die ik vaag kan vinden op pagina's zijn tips als array.copy of buffer.copy .

Maar die twee zijn toch niet van het type array of buffer... dus daar loop ik op vast,

Hopelijk weten jullie een manier om mij weer in de goeie richting te schoppen.

Bedankt!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
euhm, klinkt misschien vreemd. Maar wat ben je aan het doen dat je in de wndProc messages wilt af vangen? laat staan het gebruik van memcpy..

  • TripleQ
  • Registratie: Juni 2004
  • Niet online
Ik ben bezig een programmatje te maken die data uitleest uit de sensoren van mijn telefoon.

Namelijk de touch pro van htc..

In de c++ applicatie werkt het allemaal prima, maar omdat ik het wil combineren met het dotnet compact framework wil ik het dus graag omzetten naar c#.

Wat eigenlijk allemaal prima lukt, behalve dan die parameters omvormen tot bruikbare data, wat in c++ dus met die memcpy functie gedaan wordt. Maar c# lijkt zo'n functie niet te hebben?

  • Jaap-Jan
  • Registratie: Februari 2001
  • Nu online
Één mogelijkheid is om zelf die conversie te doen. Met een beetje bitwise AND'en met 0xFF, casten naar BYTE en shiften moet dat wel lukken. :)

[ Voor 20% gewijzigd door Jaap-Jan op 11-09-2008 21:32 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • user109731
  • Registratie: Maart 2004
  • Niet online
Het enige wat die memcpy doet is een integer van 4 bytes in een struct plaatsen. Je kunt dat toch ook handmatig doen, bijvoorbeeld door bits te shiften? :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

En wellicht wil je het hoofdstuk "Marshalling" eens doorlezen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • writser
  • Registratie: Mei 2000
  • Laatst online: 16-11 22:40
Geen idee hoe C# precies werkt, maar je wat je wil is een 32-bits integer verdelen over 4 bytes van 8 bit. Je kan dat in elk geval doen met bitmaskers, bijvoorbeeld:
C++:
1
Up = Touch & 0x000000FF;

Om de rechter 8 bits te selecteren. Maar er moet vast wel een mooiere C# oplossing zijn.

Onvoorstelbaar!


  • TripleQ
  • Registratie: Juni 2004
  • Niet online
Wow jongens!
bedankt allemaal voor jullie reacties..

Je zult altijd zien, dat als je een topic opent, dat je dan ietsje later een spoor vind op het internet..

En volgens mij ben ik eruit...

Hele simpele functie volgens mij, heb hem nog niet helemaal getest, maar volgens mij geeft hij de juiste waarden terug.. namelijk:

code:
1
2
3
4
byte[] wParamArray = new byte[4];
byte[] lParamArray = new byte[4];
wParamArray = System.BitConverter.GetBytes(wParam);
lParamArray = System.BitConverter.GetBytes(lParam);


Ik ga er even een test applicatie omheen bouwen, die de juiste gegevens ook op het scherm zet...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

De assignments in regel 1 en 2 van jouw stukje code hebben natuurlijk geen enkel nut.

[ Voor 24% gewijzigd door .oisyn op 15-09-2008 00:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • TripleQ
  • Registratie: Juni 2004
  • Niet online
Heb je helemaal gelijk in :o
Pagina: 1