Entwickler-Ecke

Sonstiges (Delphi) - Übersetzung VB -> Delphi


F34r0fTh3D4rk - Fr 24.08.07 16:25
Titel: Übersetzung VB -> Delphi
hi,

wie kann ich folgenden vb code in delphi übersetzen ?

Quelltext
1:
2:
3:
4:
5:
6:
    <StructLayout(LayoutKind.Sequential, Pack := 1)> _
    Public Structure SP_DEVICE_INTERFACE_DETAIL_DATA
      Public cbSize As UInt32
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst := 256)> _
      Public DevicePath As String
    End Structure


ich denke mal das Pack := 1 zeigt an, dass es ein packed record ist, aber was ist das <MarshalAs usw. ?
Eine folständige Übersetzung dieses Schnippels wäre toll, danke ;)

mein bisheriger Ansatz ist dieser:

Delphi-Quelltext
1:
2:
3:
4:
  TSP_DEVICE_INTERFACE_DETAIL_DATA = packed record
    cbSize: integer;
    DevicePath: string;
  end;


mfg


Marc. - Fr 24.08.07 16:45

Ich kann dir leider den Schnippsel nicht übersetzen, aber MarshalAs scheint ein Befehl in Verbindung mit .Net zu sein. Siehe hier [http://www.microsoft.com/germany/msdn/library/net/SoArbeitetNETMitWin32UndCOMZusammen.mspx?mfr=true]. (Unter B3 Nicht isomorphe Parameter.)

grüße


arj - Fr 24.08.07 17:31

Der Device Path sollte vermutlich ein array[0..255of char sein


F34r0fTh3D4rk - Fr 24.08.07 19:21

ich werde es als string lassen, mir scheint als wenn das was darüber steht, dazu dient die umwandlung von array of char in string vorzunehmen, und ich denke, dass das mit dem string schon so ok ist.
Spätestens beim Testen werde ich feststellen obs stimmt, danke ;)


mfg


arj - Fr 24.08.07 22:38

Das würde ich nicht machen. Ich nehme an das du weißt, dass es da einen Signifikanten Unterschied gibt.
Der Delphi-String ist ähnlich dem VB-String und hat NICHTS mit dem Array of Char zu tun.
Aus dem Grund wird ja genau ein Marshalling gemacht wie du richtig erkannt hast.
Deine Variante wird deshalb zu Fehlern führen. String zu verwenden ist also definitiv falsch!


F34r0fTh3D4rk - Sa 25.08.07 12:57

aber im vb code steht doch string, wie soll ich es denn an anderen stellen machen, an denen string einfach so verwendet wird ?


mfg


arj - Sa 25.08.07 16:31

Eigentlich wird wohl immer ein Array of Char erwartet werden, weil Windows bzw. C/C++ das ja so will.

Bin übrigens grad auf ein holländisches Forum gestoßen, vielleicht kannst das brauchen:
http://www.nldelphi.com/forum/showpost.php?s=03e1fefd4918c893f8650bf93bfcf08b&p=200589&postcount=3