【问题标题】:Access TryGetMember from C++/CLI从 C++/CLI 访问 TryGetMember
【发布时间】:2014-04-16 22:17:36
【问题描述】:

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

有些人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);
}

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2015-12-04
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多