Ik wil graag een methode maken die een struct als parameter krijgt.
In die methode wil ik het adres en de grootte te weten komen omdat ik
die nodig heb om een Win32 API aanroep te doen die die gegevens nodig heeft.
Het kan echter alleen elke keer een ander type struct zijn die als parameter
door gegeven wordt.
Als je een instantie van een klasse wil doorgeven aan een methode en je weet het type nog niet van te voren, dan gebruik je als parameter type Object.
Bij een struct dacht ik dan ValueType.
Je kan echter niet het adres opvragen van een instantie van ValueType.
Een ander idee was om de parameter door een fixed block te laten voeren.
Ook dan komt de compiler met de foutmelding dat hij geen adres van een managed
type kan opvragen.
Het opvragen van een adres staat trouwens altijd binnen een unsafe block.
Het volgende probeerde ik te bereiken:
Ik wil als parameter gewoon een instantie van een struct meegeven zodat ik in
de aanroepende code geen unsafe code hoef te gebruiken.
Heeft iemand een idee hoe ik dit voor elkaar ga krijgen?
In die methode wil ik het adres en de grootte te weten komen omdat ik
die nodig heb om een Win32 API aanroep te doen die die gegevens nodig heeft.
Het kan echter alleen elke keer een ander type struct zijn die als parameter
door gegeven wordt.
Als je een instantie van een klasse wil doorgeven aan een methode en je weet het type nog niet van te voren, dan gebruik je als parameter type Object.
Bij een struct dacht ik dan ValueType.
Je kan echter niet het adres opvragen van een instantie van ValueType.
Een ander idee was om de parameter door een fixed block te laten voeren.
Ook dan komt de compiler met de foutmelding dat hij geen adres van een managed
type kan opvragen.
Het opvragen van een adres staat trouwens altijd binnen een unsafe block.
Het volgende probeerde ik te bereiken:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public void CapiPutMessage(ValueType message) { uint pMessage = 0; unsafe { pMessage = (uint)&message; } uint retValue = CAPI_PUT_MESSAGE(capiAppId, pMessage); if (retValue != 0) { throw new ApplicationException("CapiPutMessage ErrorCode: " + retValue); } } |
Ik wil als parameter gewoon een instantie van een struct meegeven zodat ik in
de aanroepende code geen unsafe code hoef te gebruiken.
Heeft iemand een idee hoe ik dit voor elkaar ga krijgen?