从C ++ / CLI访问TryGetMember

时间:2014-04-11 15:22:15

标签: c# .net dynamic c++-cli

在我的C ++ / CLI项目中,我尝试访问位于TryGetMember派生类的DynamicObject方法。该类是C#DLL的一部分。 TryGetMemberGetMemberBinding个对象作为第一个参数。我应该通过什么价值?

有些人suggest using Impromptu。但是,我目前还不了解Impromptu如何帮助回答我的问题。

1 个答案:

答案 0 :(得分:2)

How to call DynamicObject.TryGetMember directly?中所述,TryGetMember不应直接调用。必须创建CallSite。这也适用于C ++ / CLI。我可以使用以下代码使其工作:

Object^ dynamicObject(Object^ object, String^ memberName)
{
    array<CSharpArgumentInfo^>^ infos = { CSharpArgumentInfo::Create(CSharpArgumentInfoFlags::None, nullptr) };
    CallSiteBinder^ binder = RuntimeBinder::Binder::GetMember(CSharpBinderFlags::None, memberName, object->GetType(), infos);
    auto callsite = CompilerServices::CallSite<Func<CallSite^, Object^, Object^>^>::Create(binder);
    return callsite->Target(callsite, object);
}