问题标签 [com-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1267 浏览

java - Java SWT 与 COM 互操作 - 将 float[] 放入 Variant?

在我的 Java SWT 应用程序中,我托管了一个第 3 方 ActiveX 控件。我正在使用 OleClientSite 来执行此操作。

我想从 Java 调用 2 个简单的小函数。以下是 COM 函数定义:

容易,对吧?这是我的假装代码:

问题在最后一行:如何将浮点数组传递给第 3 方 COM 对象?帮助!

0 投票
3 回答
1632 浏览

.net - 在 VS.Net 的调试器中正确检查 COM / Interop 类的实例?

有谁知道在 VisualStudio 的调试器中是否以及如何正确查看 COM / Interop 对象(以正确的类型)?我得到的只是'邪恶' System.__ComObject值(即使它正确识别了类型)?

例如:

截屏

0 投票
1 回答
182 浏览

c# - 跨用户 COM 互操作

我正在使用第三方数据库。主机应用程序运行数据库,并允许客户端应用程序通过 COM 连接到服务器应用程序。我正在运行 Windows 2003 Server,并用 C# 编写所有代码。

在服务器上,我以 UserA 身份登录,并且能够在本地启动主机应用程序,然后运行我编写的客户端应用程序,它连接得很好。

当我以 UserA 身份登录并运行主机应用程序时,我同时以 UserB 身份通过远程桌面登录,并且仅从用户 B 的登录名启动客户端应用程序,期望它连接到用户 A 桌面上正在运行的主机进程。它无法连接。

是否有任何技巧可以在同一台计算机上跨用户登录进行 COM 访问?

我不能运行多个主机进程的副本,否则我显然会这样做。

0 投票
5 回答
9011 浏览

.net - 没有 regasm 的 COM 互操作

我是一个受限用户,我需要编写一个 Outlook 宏来公开 Outlook 2003 和 2007 中的 C# 库。

我根本没有任何管理员权限,甚至在安装时也没有,所以我无法运行 RegAsm,也无法(我假设)编写托管加载项。

在这种情况下,有什么方法可以从 VBA 调用 .Net 代码,还是有其他解决方案?

这仅供个人使用,所以一个丑陋的黑客是完全可以接受的(只要它有效)

0 投票
1 回答
1312 浏览

interop - 如何通过 IronPython 的互操作程序集处理正在使用的 VB6 COM 对象?

我通过 IronPython 中的 .NET 互操作程序集使用第三方 COM 组件,如下所示:如何在 IronPython 中使用 VB6 COM 'reference'?

我在这方面的经验非常棒,无缝运行的东西给我留下了深刻的印象......除了一件事。

第 3 方 COM 组件使用 Microsoft 的 DAO 库(不确定是什么版本)来处理由另一个第 3 方应用程序创建的数据库。问题是在我的程序运行时重新创建了这个数据库文件,我想“取消初始化”这个 COM 对象。特别是,在我第一次运行我的例程时,运行我的代码(访问 COM 组件的属性、调用它的方法等)运行良好。但是,下一次第三方 COM 组件会显示一个消息框,说明数据库(MSAccess 95 .mdb 文件)已在使用中,并提供重试选项。按重试可以可靠地工作,因此主要问题是出现此对话框。

所以,我的理论是 COM 组件正在向数据库泄漏句柄,我找不到要调用的“清理”方法。我试过.Dispose()了,但没有奏效。

我最后的手段是使调用 COM 对象的代码成为一个单独的 IronPython 进程,该进程通过 std in/out 与我的主进程交互,因为 COM 对象所服务的角色更像是“立即给我所有这些信息”用例而不是持续需要的依赖。

我希望避免这种情况,因为我不熟悉 COM(或者真的,.NET)我只能希望我错过了一个明显的.Dispose方法或类似的东西。

如果没有干净的方法,我可以从我的进程中强制卸载程序集,类似于FreeLibrary本机代码中的重复调用吗?(我保证我的代码将不再使用该对象,所以我不必担心我的部分缺少引用导致内存保护错误)


编辑:

我无法解决这个问题,所以我采用了进程外方法,并在我的子批处理关闭时让 Windows 清理。

0 投票
1 回答
3351 浏览

c# - COM Interop(如何将数组传递给 com)通过经典 ASP

我需要为我的经典 asp 创建一个 com 对象,因为我可以创建一个 .net 程序集并让它与 com“互操作”,所以我继续创建一个这样的 .net 程序集:-

接下来我做了通常的构建,运行:gacutil & RegAsm

在我的经典asp页面中,我有这个:-

我得到错误:

错误类型:Microsoft VBScript 运行时 (0x800A0005) 无效的过程调用或参数:“添加”/eduservice/test.asp,第 25 行

但是,如果我修改程序集不使用数组,这一切都可以正常工作,我什至可以将普通字符串或 int 发送到程序集和从程序集发送到经典 asp。我读了很多东西,但我得到了同样的错误,

以前有人尝试过并且成功了,请分享您的解决方案

谢谢

0 投票
2 回答
1920 浏览

c# - 如何在 C# 中正确清理互操作对象

这是对如何在 c# 中正确清理 excel 互操作对象的后续问题 。

最重要的是,在 Excel 命名空间中使用链接调用(例如 ExcelObject.Foo.Bar() )可以防止对 COM 对象进行垃圾收集。相反,应显式创建对所使用的每个 COM 对象的引用,并使用 Marhsal.ReleaseComObject() 显式释放它们。

仅在特定于 Excel COM 对象的链式调用之后不释放 COM 对象的行为?每当使用 COM 对象时应用这种模式是否有点矫枉过正?

0 投票
2 回答
1108 浏览

visual-studio - 自动强命名 COM 互操作包装器

我在 Visual Studio 2005 中有一个 C# 项目,它引用了一些 COM 库。当我构建它时,会抛出这样的错误:

引用的程序集“assemblyName”没有强名称。

现在,我曾经在 Visual Studio 2003 中引用 COM 程序集,它会自动对 Interop 包装器进行签名。我所要做的就是设置“包装程序集密钥文件”。

我尝试在 Visual Studio 2005 中找到类似的设置,但找不到。所以我想知道是否有任何等效的方法可以在 Visual Studio 2005 中强命名 COM 互操作并摆脱上述错误。

0 投票
1 回答
2254 浏览

.net - 如何通过 COM 互操作在 .NET 对象上调用静态方法?

是否可以通过 COM 互操作在 .NET 对象上调用静态方法?

我知道我可以编写一个包装类。如果我不想这样做怎么办?

0 投票
3 回答
4313 浏览

c# - log4net - 记录通过 COM 互操作调用的 dll

我编写了一个 .NET DLL,它是从另一个使用 COM 互操作的应用程序调用的。我想使用 log4net,但我需要在运行时从其他应用程序指定日志文件的位置。

对于 WinForms 项目,我一直以最简单的方式使用 log4net,但由于 DLL 项目没有 app.config,而且我的调用应用程序也没有(它甚至不是 .NET),所以我已经尝试阅读有关 log4net 工作原理的一些信息,并尝试在不使用 .config 文件的情况下进行设置。

我已经把它编译到了它的编译阶段,并且有点符合我对 log4net 的微小理解,但它不会写入日志文件。

这是我到目前为止所拥有的,任何人都可以指出我明显的错误/误解,或者告诉我从我的 dll 中记录的更好方法吗?

谢谢!