【问题标题】:Access TryGetMember from C++/CLI从 C++/CLI 访问 TryGetMember
【发布时间】:2014-04-16 22:17:36
【问题描述】:
在我的 C++/CLI 项目中,我尝试访问位于派生自 DynamicObject 的类中的 TryGetMember 方法。此类是 C# DLL 的一部分。 TryGetMember 将 GetMemberBinding 对象作为第一个参数。我应该传递什么值?
有些人suggest using Impromptu。但是,我目前不明白 Impromptu 如何帮助回答我的问题。
【问题讨论】:
标签:
c#
.net
dynamic
c++-cli
【解决方案1】:
如 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);
}