Autor Wątek: [C#]pisanie wrappera - char* w strukturze  (Przeczytany 1600 razy)

Offline exor

  • Użytkownik

# Lipiec 07, 2007, 16:58:16
witam,
piszę sobie wrapper dla dll-ki, którą potrzebuje do obsługi pewnego urządzenia przez USB.
Napotkałem na pewien problem, otóż w dll-ce mam strukturę:
struct FT_PROGRAM_DATA
{
 ...
 WORD VendorId;
 WORD ProductId;
 char* Manufacturer;
 char* ManufacturerId;
 char* Description;
 char* SerialNumber;
 WORD MaxPower;
 ...
 ...
};

a mojej nowej dll-ce napisanej w c# mam takie cuś:
[StructLayout(LayoutKind.Sequential)]
public struct FT_PROGRAM_DATA
{
 ...
 public short VendorId;
 public short ProductId;
 // ????
 public short MaxPower;
 ...
 ...
}
No własnie, jak owo char* w strukturze z C podmienić w c# ?
Jakiś [MarshalAs()] użyć, czy coś takiego? Próbowałem różnych rzeczy, szukam rozwiązania i nic nie przychodzi do głowy.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline nameczanin

  • Użytkownik
    • devlog

# Lipiec 07, 2007, 17:08:46
byte[] ?

Offline exor

  • Użytkownik

# Lipiec 07, 2007, 17:55:59
rzeczywiście, biorąc pod uwagę użycie ASCIIEncoding to nawet by działało :P
dzięki wielkie

Offline Gloggie

  • Użytkownik

# Lipiec 07, 2007, 18:21:27
Jeżeli pola zawierają tylko liczbowe wartości - to byte[] jest dobrym podejściem.
Jeżeli zaś to tekst, zastosuj Stringa.

[MarshalAs(UnmanagedType.LPStr)]
public String Manufacturer;

i już.

Offline Xion

  • Moderator
    • xion.log

# Lipiec 07, 2007, 20:04:13
.NET Framework 2.0 będzie chyba nawet na tyle sprytny, że poradzi sobie bez tego Marshala. Pamiętam, że funkcje od WinAPI przyjmujące LPTSTR importowałem właśnie tak "intuicyjnie", podając String jako typ argumentu.