我从某人那里得到了这个程序集,我想在我的 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);
它似乎部分有效,因为“长度”实际上得到了一个值。
不幸的是,“结果”仍然为空。
我应该怎么做才能让它发挥作用?
Edit:
好吧,我设法通过用 IntPtr 替换 char[] 开始工作,然后像 Nick 建议的那样调用“Marshal.PtrToStringAnsi”:
string result = Marshal.PtrToStringAnsi(ptr);
但是,由于同一答案中的评论,我有点担心内存使用情况。程序集中没有提供其他方法,那么我该如何清理呢?