问题标签 [com4j]

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 投票
0 回答
198 浏览

java - 尝试使用 com4j 将图稿从文件添加到 iTunes IITrack 对象的灾难性错误

将 Com4j 与 iTunes 一起使用,将各种文本值添加到 IITrack 对象没有问题,但如果我尝试添加艺术品

它失败了

11/05/2017 18.24.56:BST:com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges:updateITunesLibTrackFromSong:SEVERE: 无法更新 ItunesTrack C:\Users\Paul\Desktop\TestMusic\WAV\Music\Choir of Trinity College\Carols来自 Trinity\27 - In Dulci Jubilo (organ solo).wav:8000ffff 灾难性故障:灾难性故障 com4j.ComException: 8000ffff 灾难性故障:灾难性故障:.\invoke.cpp:517 at com4j.Wrapper.invoke(Wrapper.java: 187) 在 com.sun.proxy.$Proxy57.addArtworkFromFile(Unknown Source) 在 com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.updateITunesLibTrackFromSong(WindowsUpdateItunesWithChanges.java:611) 在 com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.addEditedTrack(WindowsUpdateItunesWithChanges .java:646) 在 com.jthink。songkong.ituneshelper.WindowsUpdateItunesWithChanges.analysisFiles(WindowsUpdateItunesWithChanges.java:277) at com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.updateItunes(WindowsUpdateItunesWithChanges.java:180) at com.jthink.songkong.ituneshelper.UpdateItunesWithChanges.call(UpdateItunesWithChanges.java: 182) at com.jthink.songkong.ituneshelper.UpdateItunesWithChanges.call(UpdateItunesWithChanges.java:32) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 原因:com4j.ComException: 8000ffff 灾难性故障:灾难性故障:.\invoke.cpp:517 at com4j .Native.invoke(Native Method) at com4j.StandardComMethod.invoke(StandardComMethod.java:35) at com4j.Wrapper$InvocationThunk.call(Wrapper.java:356) at com4j.Task.invoke(Task.java:50) at com4j .ComThread.run0(ComThread.java:172) 在 com4j.ComThread.run(ComThread.java:153)

COM4j 接口是从我的 iTunes 版本构建的,因此它们存在,我不知道我是否做错了什么或者它是否坏了,我已经尝试过许多 jpog,结果都相同。我检查文件是否存在,如果尝试添加不存在的文件,则错误确实不同。

0 投票
2 回答
2720 浏览

java - 无法执行 COM 类:com4j.ComException:80040154 CoCreateInstance 失败:类未注册:.\com4j.cpp:153

我尝试了几天从 JAVA 应用程序执行“.dll”文件。如果您有兴趣,可以阅读我的第一个问题:Call a .dll function using command line

我使用“com4j”为我的 DLL 创建 COM 类。生成的类看起来不错,我尝试执行代码,更确切地说是位于名为“_Tester”的类中的名为“getUnitInfo”的方法:

实例:

但它抛出了这个异常:

我在互联网上阅读了很多关于这个问题的帖子,但没有任何帮助。使用“PE 解构”工具找出我需要执行的 .dll 文件是基于 32 位的。我有一个 64 位的 Windows 操作系统,但我安装了一个 32 位的 JAVA 和 Eclipse。

如果我在命令行中执行“java -version”:

com4j 文档缺少信息,我认为新生成的 JAva 代码仍然需要与旧 DLL 进行通信,但我不知道如何引用它。

有人可以帮忙吗?

编辑 该实例是使用此 UUID 创建的:

我在 Windows 注册表中找到了这个: 在此处输入图像描述

0 投票
1 回答
340 浏览

java - com4j 在 Eclipse 中工作,但在 jar 中不工作

我编写了一个工具(使用spring boot)从HP QC v10获取详细信息。我为此使用com4j API。程序在eclipse中运行良好,但是当我通过jar运行代码(我使用maven install 创建)时会抛出以下异常。

我已经为OTAClient.dll生成了包装器,并制作了包装器qcconn.jar的jar文件。我还注册了 dll 文件:OTAClient.dll、WebClient.dllcom4j-amd64.dll。我正在使用jdk 8(32 位)。

我检查了由maven install生成的工具的jar文件,其中包含两个jarcom4j.jarqcconn.jar

运行 jar 文件时引发异常:java -jar mytool.jar

0 投票
1 回答
62 浏览

java - JNA 可以用于像 IMAPI 这样的复杂 Windows DLL

我已经设法让 COM4J 使用 windows IMAPI(CD 写入)中的一些功能。

但是,我未能让任何返回 SAFEARRAYs 的调用正常工作,但这个项目目前似乎没有处于活动状态......

DLL一般在C:\Windows\System32\imapi2.dll,使用它也需要使用C:\Windows\System32\imapi2fs.dll

寻找一个活跃的 JAVA-COM 桥接项目将我带到了 JNA。

简化 JAVA-COM 桥接项目的职权范围引起了我的兴趣....但是我遇到了第一个障碍,希望有人能提供帮助。

到目前为止,我已经采用了 Microsoft IMAPI 示例并编写了一个 Powershell 应用程序,从中我可以对 API 进行一系列调用。[CDInterface][1]

使用 IMAPI 需要做的第一件事是创建 IDiskMaster2 的实例,所以我已经通过 Imapi2 接口声明了它,就像这样

然后在主代码中

只是将“imapi2”放在对 Native.load() 的调用中也不起作用。

我猜我在做一些根本错误的事情,但目前尚不清楚你如何让 JNA '看到'一个你想要接口的新 dll ..... 而且我有点害怕有一些非常不同的东西这个 API 来自人们使用 JNA 与之交谈的其他 API,因此可能不值得尝试!

然后在 main 中的调用更改为

IntelliJ 显示未调用的方法,因此它看起来不像 create() 被调用。不确定这是因为我需要调用它,还是因为实现 IDispatch 而不是 IUnknown 的函数。[1]:https ://github.com/nosdod/CDInterface

0 投票
0 回答
43 浏览

java - COM4J 不支持并行线程

我正在使用COM4J从我们的第 3 方提供商生成本机 DLL 库的接口。

然后我使用这些接口与我的 Spring Boot 应用程序中所需的服务进行交互。使用一个线程它可以按预期工作,但是当我尝试并行调用 DLL 方法时,com4j 将这些调用排队,而不是以并行方式执行它们。

作为新线程的入口点,我正在使用 Spring Boot 的@Async注释。

我现在设法通过为每个使用 DLL 本机库的进程创建一个微服务来解决这个问题。但是,我想了解是否有其他解决方法或者我做错了什么。

来自 COM4j API

对于每个使用 COM 对象的用户线程,都会创建一个 ComThread 来管理这些对象。

这是因为 COM 对象本质上与创建它的线程相关联,因此所有调用都必须通过创建者线程进行路由。有关更多讨论,请参阅 http://msdn.microsoft.com/en-us/library/ms809971.aspx

这种模型对于 Java 开发人员来说是相当陌生的,因为 Java 开发人员可以更自由地在线程之间传递对象。(这与是否可以安全地同时访问这些对象是一个单独的问题。)

为了弥补这些差距,我们根本不让应用程序线程接触 COM 对象,而是为每个想要创建 COM 对象的应用程序线程创建 ComThread 作为影子线程。