Hi, will ne Struktur mit Zeigern in C initialisieren. Kann mal jemand kurz drüber schauen ob da so richtig geht.
1 | typedef struct{ |
2 | PNIO_UINT32 dwHandle; |
3 | PNIO_UINT8 NumOfIODevives; |
4 | PNIO_UINT8 MaxLen; |
5 | volatile PNIO_MODE_TYPE currentMode; |
6 | volatile PNIO_IOXS localState; |
7 | |
8 | volatile PNIO_IOXS* deviceInputState; |
9 | |
10 | PNIO_ADDR* deviceInputAddress; |
11 | PNIO_UINT32* deviceInputLength; |
12 | PNIO_UINT8** deviceInputData; |
13 | |
14 | volatile PNIO_IOXS* deviceOutputState; |
15 | |
16 | PNIO_ADDR* deviceOutputAddress; |
17 | PNIO_UINT32* deviceOutputLength; |
18 | PNIO_UINT8** deviceOutputData; |
19 | }PNIO_init; |
1 | _declspec(dllexport)PNIO_init* setUpDevice(PNIO_UINT8 NumberOfDevices, PNIO_UINT8 MaxLen)//, PNIO_init* PNIO_init_struct) |
2 | {
|
3 | PNIO_init PNIO_init_struct; |
4 | PNIO_init_struct.NumOfIODevives = NumberOfDevices; |
5 | PNIO_init_struct.MaxLen = MaxLen; |
6 | PNIO_init_struct.currentMode = g_currentMode; |
7 | PNIO_init_struct.localState = PNIO_S_GOOD; |
8 | |
9 | PNIO_init_struct.deviceInputState = (PNIO_IOXS*)malloc( NumberOfDevices * sizeof( PNIO_IOXS ) ); |
10 | PNIO_init_struct.deviceInputState[NumberOfDevices]; |
11 | PNIO_init_struct.deviceInputAddress = (PNIO_ADDR*)malloc( NumberOfDevices * sizeof( PNIO_ADDR ) ); |
12 | PNIO_init_struct.deviceInputAddress[NumberOfDevices]; |
13 | PNIO_init_struct.deviceInputLength = (PNIO_UINT32*)malloc( NumberOfDevices * sizeof( PNIO_UINT32 ) ); |
14 | PNIO_init_struct.deviceInputLength[NumberOfDevices]; |
15 | PNIO_init_struct.deviceInputData = (PNIO_UINT8**)malloc( NumberOfDevices * sizeof( PNIO_UINT8 ) * MaxLen * sizeof( PNIO_UINT8 ) ); |
16 | PNIO_init_struct.deviceInputData[NumberOfDevices][MaxLen]; |
17 | |
18 | PNIO_init_struct.deviceOutputState = (PNIO_IOXS*)malloc( NumberOfDevices * sizeof( PNIO_IOXS ) ); |
19 | PNIO_init_struct.deviceOutputState[NumberOfDevices]; |
20 | PNIO_init_struct.deviceOutputAddress = (PNIO_ADDR*)malloc( NumberOfDevices * sizeof( PNIO_ADDR ) ); |
21 | PNIO_init_struct.deviceOutputAddress[NumberOfDevices]; |
22 | PNIO_init_struct.deviceOutputLength = (PNIO_UINT32*)malloc( NumberOfDevices * sizeof( PNIO_UINT32 ) ); |
23 | PNIO_init_struct.deviceOutputLength[NumberOfDevices]; |
24 | PNIO_init_struct.deviceOutputData = (PNIO_UINT8**)malloc( NumberOfDevices * sizeof( PNIO_UINT8 ) * MaxLen * sizeof( PNIO_UINT8 ) ); |
25 | PNIO_init_struct.deviceOutputData[NumberOfDevices][MaxLen]; |
26 | |
27 | .......................................
|
28 | .......................................
|
29 | |
30 | return &PNIO_init_struct; |
31 | }
|
Oder kann ich mir das Speicherresrvieren mit malloc auch sparen. Kann man aus einer dll eine Adresse einer Variable an C# übergeben und vor allem, funktioniert das dann auch ;-)