PInvoke 帮助

发布于 2024-08-08 14:18:16 字数 404 浏览 4 评论 0原文

我得到了下一个 c 函数:

long _stdcall _MakePipeString(char *szOut, long nOutChars, const char *szXmlFile, long nOptions);

我尝试像这样使用 pInvioke:

[DllImport("diXo10.dll")]
public static extern long _MakePipeString(out StringBuilder szOut, out long nOutChars, string szXmlFile, long nOptions);

但我在输出变量 szOut 中得到 null。

我做错了吗?

请帮忙。

I got the next c function:

long _stdcall _MakePipeString(char *szOut, long nOutChars, const char *szXmlFile, long nOptions);

And I try to use pInvioke like this:

[DllImport("diXo10.dll")]
public static extern long _MakePipeString(out StringBuilder szOut, out long nOutChars, string szXmlFile, long nOptions);

But i get null in the ouput variable szOut.

Am I doing wrong?

Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光瘦了 2024-08-15 14:18:16

除了其他人所说的之外,在 C# 端将 long 更改为 int。

In additions to what others have said, change the longs to ints on the C# side.

一紙繁鸢 2024-08-15 14:18:16

您是否尝试过:

[DllImport("diXo10.dll")]
public static extern long _MakePipeString([MarshalAs(UnmanagedType.LPStr)] out String szOut, out long nOutChars, [MarshalAs(UnmanagedType.LPStr)] string szXmlFile, long nOptions);

请注意,您可能还必须指定是否需要 ANSI 或 Unicode(UTF16) 字符,例如使用 LPTStr/LPWStr 而不是 LPStr 或在 DllImport 属性

Have you tried:

[DllImport("diXo10.dll")]
public static extern long _MakePipeString([MarshalAs(UnmanagedType.LPStr)] out String szOut, out long nOutChars, [MarshalAs(UnmanagedType.LPStr)] string szXmlFile, long nOptions);

Note that you may also have to specify whether you expect ANSI or Unicode(UTF16) characters, for instance by using LPTStr/LPWStr instead of LPStr or on the DllImport attribute.

手长情犹 2024-08-15 14:18:16

尝试不使用 out 参数。

请参阅此处

try without the out parameter.

see here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文