作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想调用 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/
我是一名优秀的程序员,十分优秀!