无法执行 COM class:com4j.ComException:80040154 CoCreateInstance 失败:Class 未注册:.\com4j.cpp:153
Failed to execute COM class: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153
几天来我一直在尝试从 JAVA 应用程序执行“.dll”文件。如果您有兴趣,可以阅读我的第一个问题:
我使用 "com4j" 为我的 DLL 创建了 COM classes。生成的 classes 看起来不错,我尝试执行代码,更确切地说是位于名为“_Tester”的 class 中的名为 "getUnitInfo" 的方法:
@DISPID(1610809376) //= 0x60030020. The runtime will prefer the VTID if present
@VTID(8)
int getUnitInfo(
java.lang.String strRequest,
Holder<java.lang.String> strUnitInfo,
@Optional @DefaultValue("") java.lang.String strStationName,
@Optional @DefaultValue("") java.lang.String strUserID);
实例:
Holder<String> holder = new Holder<String>("test");
_Tester instance = ClassFactory.createTester();
instance.getUnitInfo("", holder, "", "");
但是它抛出这个异常:
Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153
at com4j.ComThread.execute(ComThread.java:203)
at com4j.Task.execute(Task.java:25)
at com4j.COM4J.createInstance(COM4J.java:97)
at com4j.COM4J.createInstance(COM4J.java:72)
at DLL.ClassFactory.createTester(ClassFactory.java:21)
at proiect.DllTest.run(DllTest.java:17)
at proiect.DllTest.main(DllTest.java:11)
我在互联网上阅读了很多关于这个问题的帖子,但没有任何帮助。
使用 "PE deconstruct" 工具发现我需要执行的 .dll 文件是基于 32 位的。我有 64 位 Windows OS 但我安装了 32 位 JAVA 和 Eclipse。
如果我执行 "java -version" o 命令行:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) Client VM (build 25.171-b11, mixed mode)
com4j 文档缺乏信息,我认为新生成的 JAva 代码仍然需要与旧的 DLL 通信,但我不知道如何引用它。
有人可以帮忙吗?
编辑
使用此 UUID 创建实例:
public static DLL._Tester createTester() {
return COM4J.createInstance( DLL._Tester.class, "{4B7CF2DB-F936-4BA3-9DC6-5E99E5220270}" );
}
我在 Windows 注册表中找到了这个:
CoCreateInstance failed : Class not registered
表示您提供的 GUID 与 Windows 注册表中的任何 COM 项都不匹配。
您可以尝试加载具有不同 GUID 的 COM 对象 - 进入系统注册表并找到任何有效的 GUID,也许是与 Microsoft Excel 关联的那个(在我的例子中,该条目位于 Computer\HKEY_CLASSES_ROOT\Excel.Application\CLSID
).
要注册您的 DLL,也许 How do I register a DLL file on Windows 7 64-bit? 会有所帮助。
编辑
在 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
下检查您的注册表。
您的 GUID 是否列在 类 下?
您好,一个月前我遇到了同样的问题,我制定的解决我问题的最终解决方案是将我的 java 64 位更改为 32 位,它开始工作了。
注意 - 仅在构建路径中添加 com4j.jar 并且不注册任何 .dll 文件。
希望这对你有用
几天来我一直在尝试从 JAVA 应用程序执行“.dll”文件。如果您有兴趣,可以阅读我的第一个问题:
我使用 "com4j" 为我的 DLL 创建了 COM classes。生成的 classes 看起来不错,我尝试执行代码,更确切地说是位于名为“_Tester”的 class 中的名为 "getUnitInfo" 的方法:
@DISPID(1610809376) //= 0x60030020. The runtime will prefer the VTID if present
@VTID(8)
int getUnitInfo(
java.lang.String strRequest,
Holder<java.lang.String> strUnitInfo,
@Optional @DefaultValue("") java.lang.String strStationName,
@Optional @DefaultValue("") java.lang.String strUserID);
实例:
Holder<String> holder = new Holder<String>("test");
_Tester instance = ClassFactory.createTester();
instance.getUnitInfo("", holder, "", "");
但是它抛出这个异常:
Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153
at com4j.ComThread.execute(ComThread.java:203)
at com4j.Task.execute(Task.java:25)
at com4j.COM4J.createInstance(COM4J.java:97)
at com4j.COM4J.createInstance(COM4J.java:72)
at DLL.ClassFactory.createTester(ClassFactory.java:21)
at proiect.DllTest.run(DllTest.java:17)
at proiect.DllTest.main(DllTest.java:11)
我在互联网上阅读了很多关于这个问题的帖子,但没有任何帮助。 使用 "PE deconstruct" 工具发现我需要执行的 .dll 文件是基于 32 位的。我有 64 位 Windows OS 但我安装了 32 位 JAVA 和 Eclipse。
如果我执行 "java -version" o 命令行:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) Client VM (build 25.171-b11, mixed mode)
com4j 文档缺乏信息,我认为新生成的 JAva 代码仍然需要与旧的 DLL 通信,但我不知道如何引用它。
有人可以帮忙吗?
编辑 使用此 UUID 创建实例:
public static DLL._Tester createTester() {
return COM4J.createInstance( DLL._Tester.class, "{4B7CF2DB-F936-4BA3-9DC6-5E99E5220270}" );
}
我在 Windows 注册表中找到了这个:
CoCreateInstance failed : Class not registered
表示您提供的 GUID 与 Windows 注册表中的任何 COM 项都不匹配。
您可以尝试加载具有不同 GUID 的 COM 对象 - 进入系统注册表并找到任何有效的 GUID,也许是与 Microsoft Excel 关联的那个(在我的例子中,该条目位于 Computer\HKEY_CLASSES_ROOT\Excel.Application\CLSID
).
要注册您的 DLL,也许 How do I register a DLL file on Windows 7 64-bit? 会有所帮助。
编辑
在 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
下检查您的注册表。
您的 GUID 是否列在 类 下?
您好,一个月前我遇到了同样的问题,我制定的解决我问题的最终解决方案是将我的 java 64 位更改为 32 位,它开始工作了。 注意 - 仅在构建路径中添加 com4j.jar 并且不注册任何 .dll 文件。
希望这对你有用