C Struktur in DLL Funktion

Gast #5006845
Lesenswert?

Hallo, in einer DLL Funktion soll eine Struktur mit Daten befüllt und 
diese soll danach per Pointer in eine C# Anwendung zur Verfügung 
gestellt werden.
Wie könnte eine mögliche Lösung hierfür aussehen?
1
// Deklaration der Struktur Data
2
struct Data
3
{
4
  uint8_t x;
5
  uint16_t y;
6
  uint32_t width;
7
  uint32_t height;
8
};
9

10
Data pData[5];
11

12

13
for (int i = 0; i < 5; i++)
14
{
15
 pData[i].x = 254;
16
 pData[i].y = 0x1234;
17
 pData[i].width = 0x12345678;
18
 pData[i].height = 0xB234567A;
19
}
Gast #5006854
Lesenswert?

Vielen Dank für den Link. Ich kann da leider nichts finden wo mir bei 
meinem Problem weiterhelfen könnte. Mit einer eindimensionalen Struktur 
funktioniert die Rückgabe. Wenn ich nun mehrere Instanzen von der 
Struktur anlege und diese übergebe funktioniert die Rückgabe nicht.
Gast #5006874
Lesenswert?

1
typedef int(__stdcall* CallbackRead)(int length, void *pData);
1
[StructLayout(LayoutKind.Sequential)]
2
public struct Data
3
{
4
 char x;
5
 UInt16 y;
6
 UInt32 width;
7
 UInt32 height;
8
};
9

10
public delegate int CallbackDelegate(int length, ref Data pData);
11

12
private int onCallback(int length, ref Data pData)
13
{
14
  return 0;
15
}
Gast #5006903
Lesenswert?

// Implementierung in C
1
struct Data
2
{
3
  uint8_t x;
4
  uint16_t y;
5
  uint32_t width;
6
  uint32_t height;
7
};
8

9
typedef int(__stdcall* CallbackRead)(int length, void *pData);
10

11
__declspec(dllexport) int __stdcall Read(CallbackRead clbFunctionRead, void* handle)
12
{
13
 int Len = 0;
14

15
 Data pData[5];
16
 for (int i = 0; i < 5; i++)
17
 {
18
   pData[i].x = 254;
19
   pData[i].y = 0x1234;
20
   pData[i].width = 0x12345678;
21
   pData[i].height = 0xB234567A;
22
 }
23
 clbFunctionRead(Len, pData);
24
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren