gpt4 book ai didi

c# - 将 Clarion 过程声明转换为 C# DLLImport

转载 作者:行者123 更新时间:2023-11-30 19:11:07 25 4
gpt4 key购买 nike

如何将此 Clarion 过程声明转换为 C#?它是用 C 编写的第 3 方 DLL 的一部分,没有太多文档。我已经在 Clarion 中列出了该方法的原型(prototype),它可以正常工作。在 C# 中,我不确定使用什么类型来替换 *CString。我像@DanielC 建议的那样尝试了 char[],但它没有用。我还发现 Clarion long 是 32 位的(感谢 @shf301)。

号角:

SendRequest Procedure(*CString xData,Long DataLen,Long xTimeout),Byte,Virtual

C#(我试过,但没用):

[DllImport("3RD_PARTY_API.dll")]
private static extern long SendRequest(ref string xData, int DataLen, int xTimeout);

当我在 C# 中调用 SendRequest 方法时,我得到了标准 PInvokeStackImbalance was detected来自 VS2010 的错误。我认为这是参数类型的问题,而不是 DllImport declaration 中的 CharSetEntryPoint .我真的只是停留在如何将 *CString 转换为有效的 C# 类型上。

最佳答案

我找到了答案。我希望我仍然与编写此代码的开发人员一起工作,这样我就可以对他们大喊大叫。他们在 API 周围放置了一个包装器,以便我列出的带有 3 个参数的方法可以在没有超时值的情况下调用实际的 API。 PInvokeStackImbalance 异常来自于我添加了一个额外的参数。

这里是实际的 Clarion 过程以及正确的 C# 语法:

号角:

SendRequest Procedure(*CString xData, Long DataLen), Byte, Virtual

C#:

[DllImport("NOVA_API.dll", EntryPoint = "SendRequest")]
private static extern byte SendRequest(string xData, int DataLen);

总而言之,Clarion *CString 可以在 DLLImport 声明中转换为 .NET string 类型。

非常感谢那些回复的人。这是我在搜索中使用的额外资源,我发现它非常有用:pinvoke.net

关于c# - 将 Clarion 过程声明转换为 C# DLLImport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130365/

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