c# - 在 C# 中编码(marshal)带有指针参数的方法指针

标签 c# interop cil

我需要用指针参数编码一个方法指针,就像在 C 中一样:

void (*callback)(int *x);

我如何在 C# 中将其写为结构字段?

注意:我不介意让 CLR 为我取消引用指针。

最佳答案

如果您的方法需要一个接受指向任何结构的指针的回调,您可以在指定 P/Invoke DllImports 时传递一个托管回调,如下所示:

private delegate void MyCallback(IntPtr par);

[DllImport("MyLibrary.dll")]
public static extern void SomeFunction(MyCallback callback);

然后您可以将 IntPtr 编码到实际回调方法中的适当结构。

[编辑]

要通过引用传递 int 参数,以下委托(delegate)签名应该最有效:

private delegate void MyCallback(ref int par);

关于c# - 在 C# 中编码(marshal)带有指针参数的方法指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861461/

相关文章:

c# - 如何加快写入 Excel 工作表的速度

c# - 将 C# 类数组作为结构数组编码到 C

c# - 有没有工具可以在 Visual Studio 中选择一些代码并让它显示相应的 MSIL?

c# - 为什么 .NET 的 Scala 编译器会忽略 val 的含义?

c# - 找不到重载方法

c# - 触发 OnPropertyChanged 时更新其他属性

.net - Firebird .NET 互操作

c# - 动态替换 C# 方法的内容?

c# - 无法将 int 转换为 bool

c# - 字符串替换在 asp.net 中不起作用