在我的 C++/CLI 项目中,我尝试访问位于派生自 DynamicObject
的类中的 TryGetMember
方法。此类是 C# DLL 的一部分。 TryGetMember
将 GetMemberBinding
对象作为第一个参数。我应该传递什么值?
一些人suggest using Impromptu .但是,我目前不明白 Impromptu 如何帮助回答我的问题。
最佳答案
如 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);
}
关于c# - 从 C++/CLI 访问 TryGetMember,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016603/