gpt4 book ai didi

c# - 如何从 C# 调用此 native 方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:47 24 4
gpt4 key购买 nike

我想调用 native 库的一个/多个函数,但我不确定类型映射。我目前正在尝试的具体功能如下,这是我加入的小型控制台应用程序:

extern char *tgetstr (const char *name, char **area);

这是我尝试将其映射到 .NET 控制台中使用的尝试。 我收到一条错误提示,试图读取或写入 protected 内存。

class Program
{
[DllImport("termcap.dll")]
public static extern IntPtr tgetstr(IntPtr name, IntPtr area);

static void Main(string[] args)
{
IntPtr ptr1 = new IntPtr();
IntPtr a = tgetstr(Marshal.StringToCoTaskMemAnsi("cl"), ptr1);
Console.WriteLine(Marshal.PtrToStringBSTR(a));
}
}

TIA

安德鲁

最佳答案

您需要通过ref 传递您的IntPtr,以便函数可以覆盖它。然后你还需要在复制后释放字符串,希望 DLL 提供匹配的释放函数。 StringToCoTaskMemAnsi 也没有帮助您,它只是在泄漏内存。

正确的 p/invoke 声明可能是

[DllImport("termcap.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr tgetstr(string name, ref IntPtr area);

关于c# - 如何从 C# 调用此 native 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092417/

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