gpt4 book ai didi

c# - .net/native 编码的 out string 和 StringBuilder 之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:31 25 4
gpt4 key购买 nike

我有一个 C 库,但我没有需要从 .NET 调用的源代码。

我需要的Query函数的签名是:

typedef int LoginID;
typedef const char* XML;
typedef DSQUERYHANDLER* PDSQUERYHANDLER;
typedef ErrCode DSQUERYHANDLER (LoginID lh, void* tag, XML resXML, ErrCode retCode);

Query(LoginID lh, XML queryXML, XML* queryResultXML_out, void* tag, PDSQUERYHANDLER cb);

我写的对应的C#是:

delegate ErrCode DSQUERYHANDLER(int lh, IntPtr tag, string resXML, ErrCode retCode);

[DllImport("dllname.dll")]
internal static extern ErrCode Query(int lh, string queryXML, out string queryResultXML_out, IntPtr tag, DSQUERYHANDLER cb);

我实际上并不关心最后两个参数并传递 IntPtr.Zeronull

当我调用 Query 时,它将我提供给它的字符串设置为我期望的值,但它也会因 System.AccessViolationException 而崩溃!

如果我改为使用 StringBuilder 而不是 out string:

[DllImport("dllname.dll")]
internal static extern ErrCode Query(int lh, string queryXML, StringBuilder queryResultXML_out, IntPtr tag, DSQUERYHANDLER cb);

然后它不会崩溃,但 StringBuilder 包含长度为 4,但每次运行时具有不同的值,例如 Èf 或 p'F。

我的问题

使用 out stringStringBuilder 有什么区别?我是否可以在不访问 C 库内部的情况下调试它?

最佳答案

你的问题已经在这里得到解答 -

DLLImport c++ functions with char* input as and output parameters

我不会在这里重复信息 - 请阅读上面的链接,这将解释调用您的函数的过程。

我觉得解释 StringBuilder 和 String 之间的区别对您解决问题没有帮助。

关于c# - .net/native 编码的 out string 和 StringBuilder 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38354039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com