gpt4 book ai didi

c# - P/调用 const char 指针和 int 引用

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

我尝试在 C# 中 P/Invoke C 函数,但总是收到 System.AccessViolationException。请帮助我理解我做错了什么?

C 代码:

RAYGUIDEF bool GuiListView(Rectangle bounds, const char *text, int *active, int *scrollIndex, bool editMode);

C# 代码:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Rectangle
{
public float x;
public float y;
public float width;
public float height;

public Rectangle(float x, float y, float width, float height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}

[DllImport(nativeLibName,CallingConvention = CallingConvention.Cdecl)]
public static extern bool GuiListView(Rectangle bounds, [MarshalAs(UnmanagedType.LPStr)]string text,[Out] int active, [Out] int scrollIndex, bool editMode);

最佳答案

当使用 P/Invoke 传递指针时,例如使用 activescrollIndex 变量,您需要在托管签名。请参阅here了解 ref[out] 之间的区别。

有一些工具可以帮助生成这些签名。使用 P\Invoke Interop Assistant:

    [System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="GuiListView")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.I1)]
public static extern bool GuiListView(Rectangle bounds, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string text, ref int active, ref int scrollIndex, [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.I1)] bool editMode) ;

关于c# - P/调用 const char 指针和 int 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54344951/

25 4 0
文章推荐: c# - 通过 Web 服务自动公开数据库表
文章推荐: javascript - Extent翻转卡片功能——Jquery
文章推荐: c# - connectionstring 和 entityframework 的问题
文章推荐: javascript - 在 ReactJS 中将类名添加到
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com