Autor Beitrag
David86
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 25.07.09 14:33 
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:
ausblenden 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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 25.07.09 15:00 
Denk doch nicht so kompliziert... :zwinker:
ausblenden C#-Quelltext
1:
public static extern void Fkt(ref TEST_STRUCT pTest_STRUCT);					

_________________
>λ=