Odpowiedź OregonGhost jest poprawna tylko wtedy, gdy znak * zwrócony z GetDir jest przydzielony w HGlobal lub LocalAlloc. Nie pamiętam, który z nich, ale CLR, założy, że każdy typ łańcucha znaków z funkcji PInvoke został przydzielony z jednym lub drugim.
Bardziej niezawodnym sposobem jest wpisanie zwrotu GetDir jako IntPtr. Następnie możesz użyć dowolnej z funkcji Marshal.PtrToStringAnsi, aby uzyskać typ łańcucha. Daje również elastyczność w zakresie uwalniania łańcucha w wybrany przez ciebie sposób.
[DllImport("your.dll", CharSet = CharSet.Ansi)]
IntPtr GetDir(StringBuilder path);
Czy możesz podać nam inne wskazówki dotyczące zachowania GetDir? Czy modyfikuje ciąg wejściowy? W jaki sposób zwracana jest wartość zwracana? Jeśli możesz zapewnić, że mogę dać znacznie lepszą odpowiedź.
Ahhhh .... PtrToStringAnsi było tym, czego szukałem, w międzyczasie zorientowałem się, że używam IntPtr, ale teraz napotkam jeden szkopuł ... Używam .NETCF i PtrToStringAnsi jest tylko w pełnym frameworku :( –
Okazuje się, że OpenNetCF ma PtrToStringAnsi .... wygląda jak problem został rozwiązany, oznaczy to jako zaakceptowany, gdy tylko będę mógł przetestować kod –
.NET .NET automatycznie rozpoznaje StringBuilder na znak * dla parametrów wejściowych lub był potrzebujesz jakiejś biblioteki innej firmy, aby to zadziałało? Dzięki. – kmehta