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

Java JACOB库的有效COM结构是什么?,java,c#,dll,com,jacob,Java,C#,Dll,Com,Jacob,我正在使用JACOB(javacombridge)库从Windows操作系统调用已注册的COM对象。 我花了一段时间才弄明白雅各布是怎么工作的,并把一切都安排好了。所以我现在的问题是: ActiveXComponent comp = new ActiveXComponent("iTunes.Application"); 例如,我的iTunes正常启动等。 如果我想调用一个用C#编写的自生成并注册的COM对象,JACOB会响应以下错误: Exception in thread "main" c

我正在使用JACOB(javacombridge)库从Windows操作系统调用已注册的COM对象。 我花了一段时间才弄明白雅各布是怎么工作的,并把一切都安排好了。所以我现在的问题是:

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 on build register for 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进程相同的位注册才能成功。

感谢您的提示,我找到了一个解决方案:

Visual Studio显然将我的COM对象注册为32位。 我不确定这是否是默认设置(?)

因此,解决问题的两个简单步骤是:

  • 以管理员身份打开windows cmd

  • 运行以下命令:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe/verbose/nologo/codebase“dll的路径”

  • 该命令将以64位而不是32位注册.dll。 这为我解决了问题,我可以通过雅各布使用它