通过 COM 从 Ruby 调用 C# .dll

2024-01-22

我正在尝试在 Ruby 代码中调用 C# 中的一些方法。首先,我在 Visual Studio 2008 中创建一个 .dll。我在构建时注册 COM 互操作。

为了测试这个新过程,我用 C# 创建了一个简单的 DivideTwo 小方法 -

        public double DivideTwo(double a, double b)
    {
        return a / b;
    }

在 Ruby 中,我执行以下操作:

require 'win32ole'
test=WIN32OLE.new('DllAttempt.CsharpDll')
x=test.DivideTwo(5,5)
puts x
#x=1

我很兴奋,因为我想我已经成功了!我决定接下来通过以下方法从 C# 返回哈希值:

        public Hashtable Hashtbl(string a,int b)
    {
        Hashtable bbDataHash = new Hashtable();
        bbDataHash.Add(a, b);
        return (Hashtable)bbDataHash;
    }

在 Ruby 中,我执行以下操作:

require 'win32ole'
test=WIN32OLE.new('DllAttempt.CsharpDll')
x=test.Hashtbl("key",1)
puts x
#x=#<WIN32OLE:0x283f3f4>

正如您所看到的,我返回了一个 COM 对象。我无法从该对象中获取任何内容。 x.each {block} 给我一个“无法获取 IEnum Interface”错误。有趣的是,如果我从 C# 返回一个数组,.each 将作用于该对象。

我是否以正确的方式处理这件事?

Thanks


While HashTable是 ComVisible,它不会通过 COM 封送处理从 C# 集合神奇地转换为 Ruby 集合。

我不懂 Ruby,所以我不能给你一个例子,但你可能需要打电话HashTable.GetEnumerator并使用IEnumVARIANT http://msdn.microsoft.com/en-us/library/windows/desktop/ms221053%28v=vs.85%29.aspx从那里返回来遍历你的HashTable在红宝石中。

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

通过 COM 从 Ruby 调用 C# .dll 的相关文章

随机推荐

  • 如何从整数列表中生成整数?

    如何从整数列表中生成整数 例如 从 lst 1 2 3 使 a 123 我尝试过 for i in lst print i end 但如果我需要不打印 而只是得到这个号码 Use map将列表中的元素转换为字符串 use str join连
  • 如何从头开始在delphi 7中进行DLL的远程调试

    谁能帮我解决一下如何远程调试独立于 exe 的 DLL 只是一个 dll DLL 是一个将在服务器计算机上运行的服务 DLL 源代码位于客户端计算机上 现在 当该服务在服务器计算机上运行时 我想使用 delphi 7 调试位于客户端计算机上
  • codeigniter 表单 POST 从视图到控制器中为空

    我正在使用 Codeigniter 我创建了一个 HTML 表单 将数据发布到控制器 该表单运行良好 但突然停止发布数据 HTML
  • 解释 Struts 2、Spring 和 Hibernate 集成的教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在工作中 我被要求创建一个相当基本的 Web 应用程序 数据库顶部的前端 GUI 用于存储通过表单输入的
  • Silverlight 3 中合并资源字典的正确使用

    正如我读到的 http msdn microsoft com en us library cc903952 VS 95 aspx http msdn microsoft com en us library cc903952 VS 95 as
  • 如何使用 BEM 方法构建自适应网页的 css?

    对于固定布局使用 BEM 很容易 带有媒体查询的自适应网页的 CSS 样式结构是怎样的 html 示例 div class t news div class t news post b post div class b post title
  • 按钮setBackgroundColor无高亮效果

    当我创建一个按钮时 Button myButton new Button this myButton setText Click Me 它创建一个按钮 单击该按钮时 该按钮会变成 橙色 以指示单击 添加到按钮时 button setBack
  • 使用 Qt 进行 C++0x 编程

    有人使用 C 0x 使用 Qt 进行过编程吗 效果如何 是否可以使用 C 0x 的所有优秀功能 您使用什么编译器和版本 我目前使用 gcc 4 6 并尝试所有 c 0x 功能 但我还没有对 Qt 做任何事情 Qt 几乎取代了所有标准库功能
  • 将语言字符转换为拉丁字母

    我尝试编写一个应用程序来学习外文字符 例如 如果您想学习日语 那么您必须记住所有平假名 片假名和汉字字母 例如 平假名 片假名本 学 汉字 例子 一些用户正在尝试学习日语 所以他必须学习 卡本 hon 含义 基础 书 这个 而且他还必须学习
  • SQL查询获取多次出现的值

    我需要查询数据库以显示表中姓氏出现超过 3 次的记录 示例 在我的学生表中 有 3 个姓氏为 Smith 的人 4 个姓氏为 Johnson 1 个姓氏为 Potter 我的查询应该显示姓氏为 Smith 和 Johnson 的记录 因为这
  • 在 matlab 中直观地将数据分为两类

    我有两个数据簇 每个簇都有 x y 坐标 和一个知道其类型的值 1 class1 2 class 2 我已经绘制了这些数据 但我想用边界 视觉上 分割这些类 做这样的事情的功能是什么 我尝试了轮廓 但没有帮助 考虑一下这个分类 http e
  • 不要在 Apache access.log 中记录某些请求

    我最近用自托管分析工具 Piwik 取代了 Google Analytics 这意味着每次有人连接我的网站http www mywebsite com http www mywebsite com 在客户端上执行 Javascript 跟踪
  • Python:获取可调用函数参数的名称

    如何获取作为参数传递给另一个函数的可调用函数的字符串表示形式 def foo print This is my callback function def bar callback None print something bar foo
  • C++ 中位字段的特征

    Reading https en cppreference com w cpp language bit field https en cppreference com w cpp language bit field 下列结论正确吗 相邻
  • 使 git pull (rebase) 默认仅从当前下游分支拉取

    我正在使用我发现的方法默认情况下拉 rebase http d strelau net post 47338904 git pull rebase by default进行 git pull 时 现在我想让 git pull 默认情况下仅拉
  • 获取房产指南

    这是上下文 我正在尝试为 经过身份验证的用户 组设置一堆属性 为此 我编写了以下脚本 GETTING AUTHENTICATED USERS SID sid1 S 1 5 11 objSID1 New Object System Secur
  • @ImportAutoConfiguration 和 @Import 有什么区别

    是不是真的org springframework boot autoconfigure ImportAutoConfiguration是改进的替代品org springframework context annotation Import因
  • 中央流光按钮

    如何使用 Streamlit 将按钮居中以使该按钮仍然可单击 这是返回随机数的按钮的一个小示例 import streamlit as st import numpy as np if st button Click rand np ran
  • 运行简单后台任务的最简洁方法?

    我已经看到至少五种模式 通过它们您可以在工作线程中运行一些代码 最简单 new Thread new Runnable public void run start 我们可以延长AsyncTask 我们有AsyncTaskLoader和别的L
  • 通过 COM 从 Ruby 调用 C# .dll

    我正在尝试在 Ruby 代码中调用 C 中的一些方法 首先 我在 Visual Studio 2008 中创建一个 dll 我在构建时注册 COM 互操作 为了测试这个新过程 我用 C 创建了一个简单的 DivideTwo 小方法 publ