c# - 从 C++/CLI 访问 TryGetMember

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

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

一些人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/

相关文章:

c# - 在解决方案中管理和命名表单的合适方法是什么?

HTML:元素的动态大小

c# - 查找包含进程特定文本的窗口

c# - .NET HTTP GET 与正文

c# - 动态创建强名称,无需 Sn.exe

javascript - 从外部链接每 5 秒更改一次文本

c# - 如何在 C# 中使用 Newtonsoft.json 解析具有不同名称的 JSON 子节点列表

c# - 前缀 "On"在 C# 编码中的事件案例中实现了什么?

c# - 自动映射器配置

c# - 来自 .NET 的 ODBC 驱动程序列表