Hi,

Vermutlich habe ich nicht richtig verstanden was Du da wie machen willst
^^

Also hier mal ein Beispiel wie ich mit Strukturen arbeite (WIN API)


//Struktur deklarieren
                [StructLayout(LayoutKind.Sequential)]
                        public struct EDITSTREAM
                {
                        public int dwCookie;
                        public int dwError;
                        public EditStreamCallback pfnCallback;
                }

//meine Methode
                [DllImport("User32", SetLastError=true)]
                public static extern int SendMessage(
                        IntPtr hWnd,
                        int Msg,
                        int wParam,
                        ref EDITSTREAM lParam);



//Erzeugen der Struct und Aufruf der Methode
                                API.EDITSTREAM s = new API.EDITSTREAM();
                                s.dwCookie = 0;
                                s.dwError = 0;
                                unsafe
                                {
                                        s.pfnCallback = new
API.EditStreamCallback(StreamOutCallback);
                                        int c =
API.SendMessage(this.Handle, API.EM_STREAMOUT, API.SF_RTF, ref s);
                                }


Gruß,

Micha

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im Auftrag von Tobias Traguth
Gesendet: Montag, 19. April 2004 11:25
An: [EMAIL PROTECTED]
Betreff: [Framework.net] struct* Übergabe an dll und zurück

Hi Liste,
hab mal wieder ein kleines Problemchen und hoffe auf Eure Hilfe:
Hintergrund: Es werden Methoden einer externen .dll (C++) aufgerufen
welcher ein Pointer auf eine Struktur übergeben wird. Die DLL soll die
Struktur mit Daten füllen und diese Daten werden dann in der App
(windows form) dargestellt.
Ich habe die Struktur aus c++ übernommen und in eine c# struct
umgewandelt:

[StructLayout(LayoutKind.Explicit)]
unsafe public struct TSDKStationInformation
{
        [FieldOffset(0)]public System.UInt32 size;       
        [...]   
        [FieldOffset(32)] public System.Char * Description;   
        [...]
}

Eine Variable von Typ der Struktur ist als Klassenmember deklariert.
Mein externer Funktionsimport sieht so aus:

[DllImport("blah")]
private unsafe static extern int GetStation(System.Int16 ListMode,
System.Int32 StationID, TSDKStationInformation * StationInformation);

Der Aufruf im Code so
[...]
fixed(TSDKStationInformation * pStationInformation =
&StationInformation)
{                       
        GetStation(0, 1,  pStationInformation);
        tbxMessage.Text += "\r\ntest: " + test + " x:" +
StationInformation.Coordinate.x + " y:" +
StationInformation.Coordinate.y;
}

Ist das mit dem fixed richtig? Ich habs schon mit out versucht, aber das
hat nicht geklappt.
Das Problem scheint zu sein dass er zwar den Pointer auf die Struktur
richtig übergibt, das Füllen in der DLL auch soweit funzt (laut debugger
in VC++ 6) aber ich am Ende des Aufrufs in meiner .NET Variable nicht
drin stehen habe.

Was ist zu beachten bei der Übergabe von Pointern auf Strukturen wenn
ich zwischen .NET und "unsafe" Code hin und her springe.
Hab zwar schon alles veruscht (zumidnest alles was ich weiss) finde aber
den Fehler nicht :-((

Danke für Eure Hilfe
Tobias :-)
_______________________________________________
Framework.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/framework.net

_______________________________________________
Framework.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/framework.net

Antwort per Email an