【发布时间】:2014-01-03 05:27:18
【问题描述】:
不知道该给我的问题取什么名字,但是,
我有一些使用 DllImports 访问 C dll 的 C# 代码。 在 C# 代码中,我有注册并由 C dll 调用的函数。 C dll 调用将指针传递给它们的函数。
我让它使用 IntPtr 来表示 C# 回调中的 arg。
工作回调方法:
public static int test(IntPtr lua_State)
现在的问题是:
我希望参数类型改为具有 1 个 IntPtr 字段的类,以及将在该 IntPtr 上运行的实例方法
所以新的回调方法如下所示:
public static int test(Lua lua_State)
班级将是:
[StructLayout(LayoutKind.Sequential)]
public class Lua
{
IntPtr lua_State;
//Some random methods...
}
不幸的是,这不起作用,回调被调用,但 Classes IntPtr 字段没有获得传递的值,而是 0。
有没有办法让它工作?
编辑:
派生自 SafeHandle 作品,但是我宁愿不使用 safehandle 类,因为我不希望/不需要它添加的任何多余内容,我只需要将指针值放入我的类的 IntPtr 字段中。
【问题讨论】:
-
使用第一个方法定义,您可以简单地将
Lua.lua_State作为 IntPtr 传递吗? -
我不确定你的意思,C dll 正在传递一个指针。第一个方法,工作回调,接收作为 IntPtr 的指针,该示例中不存在 Lua 类。如果需要,我可以将 IntPtr 参数转换为 Lua 类的实例,但我想要的是从 C 传递的指针直接转换为类实例。我犹豫说我希望将指针“编组”到成为一个类,因为我认为这可能是不正确的。