我是 C 和 C++ 中纯 Windows API 级函数的完全新手,最近一直在试验 .NET 互操作性。我已经构建了一个简单的库,它已成功将数值(int/float 等)返回给 .NET 调用者,但我在字符串方面运气不佳。
我尝试了多种不同的数据类型,但似乎都不起作用:LPSTR、LPCSTR、LPCTSTR 和 LPCWSTR。诚然,我还没有尝试过 char*。此外,一旦方法被设置为返回一个字符串,它是否需要由 .NET 编码为特定数据类型,还是可以简单地直接读入 System.String 对象?我曾尝试解析为 IntPtr,然后转换为字符串,但这没有用。
最佳答案
做 Windows API 做的事。它通常不返回指针,它填充您传入的缓冲区。
托管代码:
[DllImport("YourLibrary", CharSet = CharSet.Auto)]
static extern Int32 SomeArbitraryFunction (
String input, // string passed to API (LPCSTR)
StringBuilder output, // output filled by API (LPSTR)
Int32 outputMaxLen // StringBuilder.Capacity
);
在 C/C++ 方面:
DWORD WINAPI SomeArbitraryFunction (
LPCSTR input,
LPSTR output,
DWORD outputMaxLen
);
关于.net - 从 Windows C 函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505493/