Dit is mijn eerste post op GOT, heb meelij... Op mijn 'reguliere' forum was onvoldoende kennis aanwezig voor onderstaande vraag.
Ik ben onlangs begonnen met programmeren in C#. Mijn achtergrond is voornamelijk Delphi, C++ en wat exotischere talen als PL/1 en VAXPascal.
Voor het starten van een communicatieprotocol dat bij de fabrieksapparatuur hoort die ik beheer is het nodig om een hard geadresseerde pointer te gebruiken (heeft te maken met aangeleverd DLL's, er is niet echt een zinnige manier om dit anders te doen).
In C# heb ik daarvoor de volgende code bedacht:
De compiler (Studio 2005) geeft dan echter (terecht) als melding dat een uint niet impliciet naar een void* kan worden gecast en dat daar een expliciete cast voor beschikbaar is. De tweede poging was dan ook:
Helaas... dan komt de compiler met de melding dat er in een fixed declaration niet gecast mag worden...
Mijn concrete vraag is dus: hoe kan ik een void pointer maken die naar 0xBADBAD80 verwijst en waar de garbage collector vanaf blijft???
Ik ben onlangs begonnen met programmeren in C#. Mijn achtergrond is voornamelijk Delphi, C++ en wat exotischere talen als PL/1 en VAXPascal.
Voor het starten van een communicatieprotocol dat bij de fabrieksapparatuur hoort die ik beheer is het nodig om een hard geadresseerde pointer te gebruiken (heeft te maken met aangeleverd DLL's, er is niet echt een zinnige manier om dit anders te doen).
In C# heb ik daarvoor de volgende code bedacht:
C#:
1
2
3
4
5
6
7
| unsafe { fixed (void * io = 0xBADBAD80) { // doe hier een aanroep naar de DLL met void pointer 'io' die naar 0xBADBAD80 wijst } } |
De compiler (Studio 2005) geeft dan echter (terecht) als melding dat een uint niet impliciet naar een void* kan worden gecast en dat daar een expliciete cast voor beschikbaar is. De tweede poging was dan ook:
C#:
1
2
3
4
5
6
7
| unsafe { fixed (void * io = (void *)0xBADBAD80) { // doe hier een aanroep naar de DLL met void pointer 'io' die naar 0xBADBAD80 wijst } } |
Helaas... dan komt de compiler met de melding dat er in een fixed declaration niet gecast mag worden...
Mijn concrete vraag is dus: hoe kan ik een void pointer maken die naar 0xBADBAD80 verwijst en waar de garbage collector vanaf blijft???