java - JACOB 库的有效 COM 结构是什么?

标签 java c# dll com jacob

我正在使用 JACOB(Java COM Bridge)库从我的 Windows 操作系统调用注册的 COM 对象。 我花了一段时间才弄清楚 JACOB 的工作原理并设置好一切。所以我目前的问题是:

ActiveXComponent comp = new ActiveXComponent("iTunes.Application"); 

例如工作正常、我的 iTunes 正常启动等。 如果我想调用用 C# 编写的自行生成并注册的 COM 对象,JACOB 会响应以下错误:

Exception in thread "main" com.jacob.com.ComFailException: Can't co-create object

我的 iTunes 启动对我来说是一个指标,表明一切都设置正确,我不确定为什么 JACOB 无法调用我自己的 .dll

目前,我在构建寄存器上使用 Visual Studio 2015 来实现 COM 互操作功能,该功能过去对我来说效果很好。 COM 对象如下所示:

[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface ComClass1Interface
{
}

[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ComClass1Events
{
}

[ComVisible(true)]
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ComClass1Events))]
[ProgId("test.Application")]
public class ComClass1 : ComClass1Interface
{
}

我的 C# dll 有什么问题吗?或者 JACOB 是否需要此 dll 中的某种类型的结构?

不幸的是,我找不到 JACOB 的任何 COM 示例。

提前致谢。

编辑:

如果我将第一行更改为:

ActiveXComponent comp = new ActiveXComponent("CLSID:{C9888A8E-8D23-4185-9D7D-A1E0B812803D}");

我遇到以下异常:

Exception in thread "main" com.jacob.com.ComFailException: Can't find moniker

不过我的 .dll 应该已注册。

最佳答案

我首先会编写一个 VBS(VB 脚本)程序来测试您的 DLL 并确保它运行。

set obj = CreateObject("test.application")
MsgBox TypeName(obj)

确保它成功。如果失败,则(假设是 64 位操作系统)尝试使用 c:\windows\syswow64\wscript.exe path\to\your\script.vbs 运行它。

检查您的 Java 进程是 64 位还是 32 位进程。您的 C# DLL 必须使用与 Java 进程相同的位数进行注册才能成功。

关于java - JACOB 库的有效 COM 结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629320/

相关文章:

java - 期望这个循环是无限的,但它不是

java - OrientDB 边缘类继承被忽略

C# 转换生日日期到年龄

c# - 从 C# 调试 C++ dll

c# - 从 C# Azure 函数中访问证书

c++ - 制作没有依赖的DLL文件

java - 带有 spring-security 的 OAuth2 - 通过 HTTP 方法限制 REST 访问

java - 如何在 Blue J 中设置 JButton 的坐标?

c# - 将字符串从 C++/CLI 类库传递到 C#

c++ - Visual Studio : can't add ATL class to ATL project?