如何将委托传递给期望托管C ++中的托管函数指针的委托

时间:2011-10-24 17:04:40

标签: c++-cli

我有以下电话:

ExecutionContext::Run(item->Context, gcnew ContextCallback(item, &WaitQueueItem::Callback), item->State);

其中WaitQueueItem如下:

ref class WaitQueueItem
{
public:
    WaitQueueItem(){}

    WaitCallback^ Callback;
    Object^ State;
    ExecutionContext^ Context;
};

WaitCallbackpublic delegate void WaitCallback(Object^ state)命名空间中定义为System::Threading

编译会出现以下错误:

  

错误C2843:   'Foo :: Bar :: Data :: ContainingClass :: WaitQueueItem :: Callback':不能   获取托管的非静态数据成员或方法的地址   型

如果我提供的函数与WaitCallback委托具有相同的签名,则会编译。用dotPeek挖掘,我看到用C#

编写的代码相同
ExecutionContext.Run(item.Context, new ContextCallback(item.Callback), item.State);

看起来像这样:

ExecutionContext.Run(item.Context, new ContextCallback(item.Callback.Invoke), item.State);

有没有办法在不必编写包装函数的情况下传递委托?

提前致谢

1 个答案:

答案 0 :(得分:0)

也许你想要

gcnew ContextCallback(item->Callback, &WaitCallback::Invoke)

(相当于C#编译器所做的,绑定对象实例item->Callback及其Invoke方法)