Я получил эту сборку от кого-то, кого я хотел бы использовать в моем приложении на c #.
Заголовок выглядит так:
int __declspec(dllimport) s2o(WCHAR* filename, char** out, int* len);
Мне удалось заставить его работать частично,используя:
[DllImport("s2o.dll", EntryPoint = "?skn2obj@@YAHPA_WPAPADPAH@Z", CallingConvention = CallingConvention.Cdecl)]
public static extern int s2o(
[MarshalAs(UnmanagedType.LPWStr)]
string filename,
ref char[] @out,
ref int len
);
И затем вызывая его так:
char[] result = null;
int length = 0;
s2o("filepath", ref result, ref length);
Кажется, что это работает частично, потому что «длина» фактически получает значение.К сожалению, «результат» остается нулевым.
Что я должен сделать, чтобы это работало?
Редактировать:
Хорошо, мне удалось добраться дозамените char [] на IntPtr, а затем вызовите Marshal.PtrToStringAnsi, как предложил Ник:
string result = Marshal.PtrToStringAnsi(ptr);
Однако из-за комментариев в том же ответе я немного беспокоюсь об использовании памяти,В сборке нет других методов, так как я могу все прояснить?