将回调参数从C#传递到非托管C ++

我有一些使用它的非托管C ++动态库和C#GUI应用程序。我想通过某些库提供的方法中的参数传递回调。是否可以从C#向非托管C ++方法传递回调。

// unmanaged C++
typedef uint8_t (__stdcall *SomeCallback)();

MYDLL_API uint8_t someMethod(SomeCallback cb);

我正在尝试以这种方式使用库:

// C# part
public delegate Byte SomeDelegate();

[DllImport("mylibraryname.dll")]
public static extern Byte someMethod(ref SomeDelegate pDelegate);

// actuak callback
Byte myCallback() {
    // some code
}

...

// call unmanaged passing callback
static void Main(string[] args) {          
    someMethod(myCallback);
}

我收到编译错误:

 cannot convert from 'method group' to 'ref SomeDelegate

我的方法完全错误吗?

阿里雷扎

这是因为您必须将ref修饰符放在参数之前,并且将其强制为变量。所以:

将您的外部更改为:

public static extern Byte someMethod([MarshalAs(UnmanagedType.FunctionPtr)] 
                            ref SomeDelegate pDelegate);

并致电给:

        SomeDelegate action = new SomeDelegate(myCallback);
        someMethod(ref action);

更新:如果您想将参数传递给回调(例如int):

public delegate Byte SomeDelegate([MarshalAs(UnmanagedType.I4)] int value);

[DllImport("mylibraryname.dll")]
public static extern Byte someMethod([MarshalAs(UnmanagedType.FunctionPtr)]
                                       ref SomeDelegate pDelegate);

Byte MyMethod([MarshalAs(UnmanagedType.I4)] int value)
{
    return (byte) (value & 0xFF);
}

并致电:

SomeDelegate action = new SomeDelegate(MyMethod);
someMethod(ref action);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将回调参数从C#传递到非托管C ++

来自分类Dev

将结构从非托管C ++传递到C#

来自分类Dev

无法将字符串从托管C#传递到非托管C

来自分类Dev

无法将字符串从托管C#传递到非托管C

来自分类Dev

使用C#在非托管代码中将委托传递给回调函数

来自分类Dev

将可变长度的字节数组从C#传递到非托管C ++ dll

来自分类Dev

将字节数组从 C++ 非托管 dll 传递到 C# unity

来自分类Dev

如何正确地将回调函数从Swift传递到C ++?

来自分类Dev

从C#通过CLI传递给非托管C ++的引用

来自分类Dev

将非托管方法作为回调传递给托管C ++ / CLI类

来自分类Dev

在 C++/CLI 中将回调函数传递给线程

来自分类Dev

将回调函数作为参数传递

来自分类Dev

将回调方法作为参数传递

来自分类Dev

非托管C#与C ++

来自分类Dev

通过C#将回车符传递到SQL SP

来自分类Dev

将参数从C#传递到Jquery

来自分类Dev

导出托管的C#函数以将更改的char *参数返回到非托管代码

来自分类Dev

从C#调用非托管C ++

来自分类Dev

从C#调用非托管C ++

来自分类Dev

C#调用C ++ DLL传递指针到指针参数

来自分类Dev

从C#到C ++的调用无法正确传递参数

来自分类Dev

如何从C到C#的结构中获取非托管的可变长度C数组?

来自分类Dev

如何从C到C#的结构中获取非托管的可变长度C数组?

来自分类Dev

将C#结构传递给非托管C ++ DLL时出现SafeArrayTypeMismatchException

来自分类Dev

将C#结构传递给非托管C ++ DLL时出现SafeArrayTypeMismatchException

来自分类Dev

当传递给非托管C DLL函数时,C#结构变量保持为空

来自分类Dev

C#将指向结构(包含不可复制类型)的指针传递给非托管C ++ DLL

来自分类Dev

如何使用从C ++到C#dll的非托管导出发送函数指针以用作回调

来自分类Dev

如何使用从C ++到C#dll的非托管导出发送函数指针以用作回调

Related 相关文章

  1. 1

    将回调参数从C#传递到非托管C ++

  2. 2

    将结构从非托管C ++传递到C#

  3. 3

    无法将字符串从托管C#传递到非托管C

  4. 4

    无法将字符串从托管C#传递到非托管C

  5. 5

    使用C#在非托管代码中将委托传递给回调函数

  6. 6

    将可变长度的字节数组从C#传递到非托管C ++ dll

  7. 7

    将字节数组从 C++ 非托管 dll 传递到 C# unity

  8. 8

    如何正确地将回调函数从Swift传递到C ++?

  9. 9

    从C#通过CLI传递给非托管C ++的引用

  10. 10

    将非托管方法作为回调传递给托管C ++ / CLI类

  11. 11

    在 C++/CLI 中将回调函数传递给线程

  12. 12

    将回调函数作为参数传递

  13. 13

    将回调方法作为参数传递

  14. 14

    非托管C#与C ++

  15. 15

    通过C#将回车符传递到SQL SP

  16. 16

    将参数从C#传递到Jquery

  17. 17

    导出托管的C#函数以将更改的char *参数返回到非托管代码

  18. 18

    从C#调用非托管C ++

  19. 19

    从C#调用非托管C ++

  20. 20

    C#调用C ++ DLL传递指针到指针参数

  21. 21

    从C#到C ++的调用无法正确传递参数

  22. 22

    如何从C到C#的结构中获取非托管的可变长度C数组?

  23. 23

    如何从C到C#的结构中获取非托管的可变长度C数组?

  24. 24

    将C#结构传递给非托管C ++ DLL时出现SafeArrayTypeMismatchException

  25. 25

    将C#结构传递给非托管C ++ DLL时出现SafeArrayTypeMismatchException

  26. 26

    当传递给非托管C DLL函数时,C#结构变量保持为空

  27. 27

    C#将指向结构(包含不可复制类型)的指针传递给非托管C ++ DLL

  28. 28

    如何使用从C ++到C#dll的非托管导出发送函数指针以用作回调

  29. 29

    如何使用从C ++到C#dll的非托管导出发送函数指针以用作回调

热门标签

归档