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:

    //...
    typedef struct __declspec(dllexport) 
    {
    	char value;
    } TEST_STRUCT;
    //...
    __declspec(dllexport) void Fkt(TEST_STRUCT *pTest_STRUCT);
    

    Und die zugehörige C#-Datei:

    //...
    [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:

    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



  • Musst du da nicht ref oder out benutzen?


Anmelden zum Antworten