为什么我无法使用 Type.InvokeMember 检索 out 或 ref 类型的参数值?

2023-11-26

标题很长,但我希望它具体一些。标题确实是个问题。尽管该方法InvokeMember正在呼叫有一个out参数并正在为该参数分配一个值,但我无法获取该值。这是我最初使用的代码:

string parameter = "";
int result = Convert.ToInt32(typeof(Ability).InvokeMember(selectedMove, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object[] { parameter }));

我改变了它,现在使它按预期工作,但我不知道为什么:

object[] args = new object[1];      //necessary to retrieve ref/out parameter
int result = Convert.ToInt32(typeof(Ability).InvokeMember(selectedMove, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, args));

我只是想帮助那些正在与非托管(COM)斗争并获取引用参数的人(我就是这么做的)。因此,当针对 COM 方法使用 InvokeMember 时,您必须判断哪些参数是引用类型。这是通过使用 ParameterModifier 类来实现的,例如:

object[] args = new object[3] { param1, param2, errorStr };
ParameterModifier pMod = new ParameterModifier(3);
pMod[2] = true;            
ParameterModifier[] mods = { pMod };

object tempObj = myCOMObject.GetType().InvokeMember("MyCOMMethod", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Public, null, myCOMObject, args, mods, null, null);

在上面的代码中,第三个参数设置为引用 (pMod[2] = true;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法使用 Type.InvokeMember 检索 out 或 ref 类型的参数值? 的相关文章

随机推荐

  • 为什么我收到 UIBarButtonItem 自定义警告?

    我有一个简单的故事板 导航视图控制器内有一个表格视图 该控制器从表格视图推送到另一个具有全屏图像视图的视图控制器 表视图的导航栏中有提示文本 当我点击表格视图中的表格视图单元格时 我收到以下警告 我根本没有自定义后退按钮 我创建了一个示例项
  • Microsoft.Web.Administration.ServerManager 在错误的目录中查找 IISExpress applicationHost.config

    当尝试获取当前计算机上的应用程序池时 我遇到了一个奇怪的问题 看起来 当安装 IISExpress 时 Microsoft 代码除了完整的 IIS 之外还想检查 IISExpress IISExpress 对每个用户使用单独的 applic
  • 在 NodeJS 服务器之间发送文件最有效的方式是什么?

    介绍 假设在同一个本地网络上 我们有两个使用 Express 设置的 Node JS 服务器 用于 API 的服务器 A 和用于表单的服务器 F 服务器 A 是一个 API 服务器 它接收请求并将其保存到 MongoDB 数据库 文件存储为
  • 发送到 NTP 服务器的 '\x1b' + 47 * '\0' 消息是什么意思?

    我正在开发 NTP 客户端 其他一些线程表明包含 x1b 47 0 的消息被发送到 NTP 服务器 但这些线程都没有解释该消息的实际含义或发送原因 我尝试查看 NTP RFC 但也无法在其中找到任何有关它的信息 x1b 47 0 表示48字
  • Java中如何比较两个时刻?

    我想要对比二Instants 查看是否等于或大于 但我不能 我不知道 我如何比较瞬间 private Instant expiration if expiration Instant now expiration gt Instant no
  • 没有大括号的 JavaScript if 语句的简洁语法

    务实地说 我对我正在寻找的东西有一个快速而肮脏的答案here 但为什么使用它不是一个好主意呢 为什么我找不到它的正式文档 它不是规范和标准的一部分吗 不是得到广泛支持吗 仅仅是因为缩小可能会破坏使用该语法的代码吗 如果您能给我提供有关该功能
  • 如何在AWS S3中上传Image Buffer数据?

    我正在尝试将缓冲区数据从图像上传到 S3 它上传得很好 但是当我尝试在 S3 中下载 查看图像时 它会抛出错误 我尝试过以下方法 我可以使用缓冲区格式 JSON 获取该图像 我无法改变这一点 let image type Buffer da
  • 如何从 Windows 任务管理器(“应用程序”选项卡)获取应用程序及其在 Delphi 硬盘上的位置

    我想获取在 Windows 任务管理器的 应用程序 选项卡 不是 进程 选项卡 中运行和可见的程序列表 并获取它们在 HDD 上的位置 我需要在 Delphi 中完成它 有人可以帮忙吗 据我所知 任务管理器中的 应用程序 选项卡是顶级窗口的
  • 为 DataContractSerializer 预定义 XML 命名空间

    我正在构建一个自托管的 WCF 服务 我正在构建一个特殊的数据结构 以实现非常灵活的数据传输 到目前为止 我测试了我的结构是否可以使用 DataContractSerializer 进行序列化 这工作得很好 我对此很高兴 但有一些事情让我烦
  • 如何将用户定义的对象插入STL集中?

    我正在尝试将对象 Point2D 插入 Point2D 集合中 但我无法做到这一点 该集合似乎适用于 int 和 char 但不适用于对象 我需要帮助来了解如何将对象插入集合中 假设我想按 x 值的升序对它们进行排序 class Point
  • 在 xamarin.ios 中使用 LaunchScreen.storyboard 添加启动图像

    我正在 Xamarin ios 上工作并使用 Visual Studio 进行开发 我添加了 LaunchScreen Storyboard 来显示启动图像 因为我也想瞄准新的 iPhoneX 设备 我当前面临的问题是 我无法在设备或模拟器
  • 如何禁用几行代码的 GCC 警告

    在 Visual C 中 可以使用 pragma warning disable 我还发现在海湾合作委员会你可以覆盖每个文件编译器标志 我该如何为 下一行 执行此操作 或者使用 GCC 在代码区域周围使用推送 弹出语义 看来这个可以做到 我
  • lambda 内的 lambda

    只是为了好奇 几天前发现了 Lambda 我只是想知道是否可以做类似的事情 尝试过解释 但我的尝试似乎都不起作用 p lambda x lambda x x 2 2 没有明确的目的 我只是没有找到满意的答案 我可能误解了 Lambda 您可
  • 使用 DOM 循环遍历“body”标签的所有元素

    html file get contents test html doc new DOMDocument doc gt loadHTML html xpath new DOMXPath doc body xpath gt query bod
  • 图/网络数据结构的 Java API 列表

    有哪些好的 Java API 可将图形 边 节点 用作数据结构 请在本 wiki 的评论中添加对类似 SO 问题的引用 请直接编辑此 wiki 条目中的列表 请添加您添加的项目的摘要描述作为答案 每个答案一个项目 为了我的硕士论文 我在网上
  • 图表中的微笑

    是否有一种方法或包可以将图 或邻接矩阵 转换为 SMILES 字符串 例如 我知道原子是 6 6 7 6 6 6 6 8 C C N C C C C O 邻接矩阵是 0 1 0 0 0 0 0 0 1 0 2 0 0 0 0 1 0 2 0
  • 我创建的类可以自动装箱吗?

    有什么方法可以对我创建的类使用自动装箱吗 例如 我有这个子类Number public class UnsignedInteger extends Number int n public UnsignedInteger int n if n
  • 在活动之间共享域对象

    我已经在域对象中编写了应用程序逻辑 以启用多个用户界面并移植到其他平台 现在正在考虑为用户界面实现活动 考虑到每个活动都需要序列化其状态 确保我的域对象仅序列化一次的最佳方法是什么 如果您正在谈论序列化对象以在活动之间共享它们 您应该创建自
  • 导入项目出现无法解析目标“android-7”

    这个应用程序是我大约一年前完成的 但从未在市场上发布过 我现在尝试在 Eclipse 中打开它 进行一些小的修改并对代码进行一些处理 所以我导入了它 然后发现了这个奇怪的 无法解析目标 错误 它在我所有的 src 文件中突出显示了每个类的红
  • 为什么我无法使用 Type.InvokeMember 检索 out 或 ref 类型的参数值?

    标题很长 但我希望它具体一些 标题确实是个问题 尽管该方法InvokeMember正在呼叫有一个out参数并正在为该参数分配一个值 但我无法获取该值 这是我最初使用的代码 string parameter int result Conver