Entwickler-Ecke

Basistechnologien - DLL-Import und Pointer als Parameter


David86 - Sa 25.07.09 14:33
Titel: DLL-Import und Pointer als Parameter
Hallo,

ich habe eine DLL in C geschrieben, welche eine Funktion Fkt besitzt und als Übergabeparameter einen Pointer auf TEST_STRUCT erhält und dann Inhalte dieser Struktur ändert...

Hier die C-Datei:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
//...
typedef struct __declspec(dllexport)
{
    char value;
} TEST_STRUCT;
//...
__declspec(dllexport) void Fkt(TEST_STRUCT *pTest_STRUCT);


Und die zugehörige C#-Datei:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//...
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct TEST_STRUCT
{
   public byte value;
}
//...
[DllImport("test.dll")]
public static extern void Fkt(IntPtr pTest_STRUCT);
//...


Und der Aufruf der Methode:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
TEST_STRUCT t = new TEST_STRUCT();
GCHandle gch = GCHandle.Alloc(t);
Fkt(GCHandle.ToIntPtr(gch));

//Hier etwas mit t machen, leider ist t jedoch nach dem Funktionsaufruf immer unverändert...

gch.Free();


Was mache ich falsch, bzw. was muss ich machen, damit ich in C# eine Funktion aus einer C-DLL mit Pointer als Parameter aufrufen kann?

Ich bin für jeden Tipp dankbar!

Viele Grüße
David


Kha - Sa 25.07.09 15:00

Denk doch nicht so kompliziert... :zwinker:

C#-Quelltext
1:
public static extern void Fkt(ref TEST_STRUCT pTest_STRUCT);