在我的C ++ / CLI项目中,我尝试访问位于TryGetMember
派生类的DynamicObject
方法。该类是C#DLL的一部分。 TryGetMember
将GetMemberBinding
个对象作为第一个参数。我应该通过什么价值?
有些人suggest using Impromptu。但是,我目前还不了解Impromptu如何帮助回答我的问题。
答案 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);
}