.net - 从 Windows C 函数返回字符串

标签 .net c winapi interop pinvoke

我是 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/

相关文章:

perl - 如何从 Perl 启动路径中带有空格的 Windows 程序?

c# - NDesk.Options/Mono.Options : Parameter with multiple key/value pairs

c - 我的结构有什么问题?

c - C 计算器中的 memcheck 问题

c++ - 无法编译旧的 WIN32 WINAPI 程序

c - 如何将句柄传递给子进程

c# - MSDTC:与底层事务管理器的通信失败

c# - IIS认证中的 "realm"是什么,它和SSL证书参数有什么关系?

c# - 为什么我的控制台应用程序有命令历史记录?

c - 无法链接到 BFD