我想有一种方法来调用引用类的方法,该方法接受本机参数。创建委托似乎是最明显的选择,但它并不适用于这些方法。
请查看以下代码段
# model/my_shop/my_order.rb
class MyShop::MyOrder
# ...
end
# model/my_shop/my_order_item.rb
class MyShop::MyOrderItem
# ...
end
答案 0 :(得分:1)
错误消息显示:
错误C3225:' T'的通用类型参数不能是' Native',它必须是值类型或引用类型的句柄
它并不是说你不能通过该方法制作代表,只是因为你无法将其表示为Action<Native>
。
您可以声明自己的委托类型,也可以使用有效的参数在通用中使用。
public delegate void ActionOfNative(Native n);
auto del3 = gcnew ActionOfNative(m, &Managed::method3); // ok
这确实会改变您传递的参数的语义,但您可以改为传递指针。 IntPtr
类型实际上与void*
相同。您可以将其用作参数类型。不过,您必须自己将IntPtr
转换回Native*
。
void method4(IntPtr ip){Native* np = (Native*)ip.ToPointer(); }
auto del4 = gcnew System::Action<IntPtr>(m, &Managed::method4); // ok
// Here's how you call del4.
Native n;
Native* np = &n;
IntPtr ip = IntPtr(np);
del4(IntPtr(&n));
del4(IntPtr(np));
del4(ip);