- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,我目前的任务是转换旧版 Visual Basic 6 应用程序,该应用程序通过第三方应用程序 XFS.ocx(无源)与 Passbook 打印机通信。
根据我的研究,我可以让 JACOB 完成这项任务,但我遇到了一个错误。谁能帮我?根据日志,我的程序可以实例化 activeX 组件并查看我想要使用的方法的 ID,但是当我尝试使用它们时遇到错误。
在我用作指南的示例 VB6 代码中,方法 VersionRequired 需要两个整数作为参数,而 ApplicationID 只需要一个字符串。
希望我只是在使用的语法或 JACOB 方法上犯了错误,因为我只想将 java JNI 作为最后的手段。请注意此应用程序将始终安装在 Windows (7/10) 工作站中,因此其他操作系统兼容性不是问题。
这是我的代码
ActiveXComponent activeXComponent = new ActiveXComponent("XFS.XFSCtrl.1");
System.out.println( activeXComponent.getIDOfName(activeXComponent, "ApplicationID"));
System.out.println( activeXComponent.getIDOfName(activeXComponent, "VersionRequired"));
System.out.println( activeXComponent.getIDOfName(activeXComponent, "Description"));
System.out.println( activeXComponent.getIDOfName(activeXComponent, "Open"));
//Variant variant = activeXComponent.call(activeXComponent, "VersionRequired",1,1);
//Variant variant = activeXComponent.call(activeXComponent, "Description"); // added 072318 for David answer
//Variant variant = activeXComponent.getProperty("Description");
//activeXComponent.setProperty("Description", "Description");
//Variant variant = activeXComponent.get(activeXComponent,"Description");
activeXComponent.call(activeXComponent, "Description", "value");
这是我遇到的日志和错误
WARNING: JNI local refs: zu, exceeds capacity: zu
at java.lang.System.initProperties(Native Method)
at java.lang.System.initializeSystemClass(System.java:1166)
main: Loading library jacob-1.19-x86 using System.loadLibrary
main: Loading library jacob-1.19-x86 using System.loadLibrary
main: Loading library jacob-1.19-x86 using System.loadLibrary
main: ComThread: before Init: 0
main: ComThread: after Init: 0
main: ROT: Automatic GC flag == false
main: ComThread: after ROT.addThread: 0
main: ROT: adding com.jacob.activeX.ActiveXComponent@11d50c0->com.jacob.activeX.ActiveXComponent table size prior to addition:0
13
31
1
21
main: ROT: adding ->com.jacob.com.Variant table size prior to addition:1
main: ROT: adding ->com.jacob.com.Variant table size prior to addition:2
main: ROT: adding ->com.jacob.com.Variant table size prior to addition:3
main: ROT: adding ->com.jacob.com.Variant table size prior to addition:4
main: ROT: adding ->com.jacob.com.Variant table size prior to addition:5
Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Description
Description: 8000ffff / Catastrophic failure
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
at com.jacob.com.Dispatch.callN(Dispatch.java:453)
// at com.jacob.com.Dispatch.get(Dispatch.java:788) // added 072318 when using activeXComponent.get(activeXComponent,"Description")
at com.jacob.com.Dispatch.call(Dispatch.java:541)
// at com.jacob.com.Dispatch.call(Dispatch.java:529) // added 072318 for David answer
at ph.com.bdo.icos.passbook.Launcher.main(Launcher.java:32)
我用作引用的 VB 代码
With XFS1
'Set up the versions required of XFS and SP
.VersionRequired(WFS_VERSREQ_OLE, WFS_VERSREQ_LOW) = 1# ' 2.00
.VersionRequired(WFS_VERSREQ_OLE, WFS_VERSREQ_HIGH) = 2# ' 2.00
.VersionRequired(WFS_VERSREQ_API, WFS_VERSREQ_LOW) = 1.01
.VersionRequired(WFS_VERSREQ_API, WFS_VERSREQ_HIGH) = 2#
.VersionRequired(WFS_VERSREQ_SRV, WFS_VERSREQ_LOW) = 1.01
.VersionRequired(WFS_VERSREQ_SRV, WFS_VERSREQ_HIGH) = 2.1
'Get back one of the values for testing
fResult = .VersionRequired(WFS_VERSREQ_API, WFS_VERSREQ_LOW)
'Set and Get the Application property for testing
.ApplicationID = "Passbook Printer"
sAppID = .ApplicationID
sDescription = .Description
最佳答案
我的猜测是 Description 是一个只读属性,而不是一个函数
因此您不能对其使用调用,并且此代码会出错,产生灾难性故障(COM 错误一直是模糊的):
activeXComponent.call(activeXComponent, "Description", "value");
如消息日志所述:
线程“main”com.jacob.com.ComFailException 中的异常:遇到 COM 异常:在调用时:描述
而且您也不能设置属性,因为它是只读的:
activeXComponent.setProperty("Description", "Description");
实际上,如果您正确阅读了 VB6 代码,Description 属性只是被读取了
sDescription = XFS1.Description
试试这个:
Variant v = activeXComponent.call(activeXComponent, "Description");
字符串描述 = v.toString();
关于java - 调用 .OCX 方法的 JACOB 灾难性故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298469/
我在运行下面的代码时遇到异常线程“main”com.jacob.com.ComFailException中的异常:无法共同创建对象。 我上网寻求帮助。有些网站说我需要注册我的 dll。我尝试使用 re
我正在尝试编写使用 autohotkey 的 Java 代码,特别是 autoitx4java 实现。我有进口 import java.text.SimpleDateFormat; import ja
我在 .net 中创建了一个 dll,并使用 jacob 从 java 程序调用它。因为昨天我有 windows 7 32 位操作系统,所以程序运行成功。现在我格式化并安装 windows 7 64
我有一个 eclipse 插件,它使用 Jacob 连接到 COM 组件。但在我完全关闭插件后,.exe 文件仍卡在 Windows 进程中。 我使用ComThread.InitMTA(true)进行
我在两个随后启动的相同线程中使用 JACOB 时遇到了一个奇怪的问题。我有一个实用程序类,它使用静态 ActiveXObject 字段将各种请求分派(dispatch)到 WMI。第一个线程工作正常。
我的环境是 Java 7,Windows 7 - 64 位。所以这是我的要求和我遵循的程序 我想从 Java 执行一个名为 test.dll 的库 我首先下载了 latest version of j
我有以下 VB 代码: Set QuoteRequest = Quotes.Add With QuoteRequest .No = 1 .QuoteCode(0)="101"
我正在研究如何使用 JACOB 在计算机上拉取本地组的成员。 我能做什么:使用单独的 WMI 查询从计算机中提取本地组列表。我不能做的:拉取这些组的成员。 我使用下面的文章给出了程序的框架:Using
我的应用程序需要使用 java 列出计算机上的所有可用还原点 ( Link )。 SystemRestore 类位于默认命名空间中,而不是 CIMV2 中。当我尝试以下代码时: public clas
我正在寻找使用 Java/JACOB 获取 powerpoint 窗口的 native 窗口句柄。 MSDN documentation似乎暗示应该可以只获取“HWND”属性,所以我正在尝试这样做:
我设法加载了两个 dll System.load("C:\\Program Files (x86)\\EXAMPLE Client\\Bin\\EXAMPLE.Client.SDK.dll")
我在 Java 中实现了 Web 服务,在 Java 中实现了 Web 服务客户端。 webservice 和 webservice 客户端都在不同的项目中,我是使用 jacob 创建的 dll。 我
我的应用程序与 jacob 发送电子邮件。现在我想在某些情况下打开邮件并等待用户按发送(或者他关闭邮件) ActiveXComponent axcOutlook = new ActiveXCompon
我正在解决库路径和雅各布的问题。好的,让我们从头开始吧。 我正在编写一个需要使用 jacob 库等的应用程序 - 该应用程序必须作为 JAR 文件运行,这就是整个目标。我正在使用 System.loa
我正在使用 JACOB(Java COM Bridge)库从我的 Windows 操作系统调用注册的 COM 对象。我花了一段时间才弄清楚 JACOB 的工作原理并设置好一切。所以我目前的问题是: A
我一直在我的 java 程序中使用 JACOB 来工作,但是每次尝试从 ITTrackCollection 获取 ITTrack 时都会遇到错误。 这是给出错误的行: a.add(t.getItem(
我目前正在开发一个基于 java 的跨平台软件分发器,我选择使用 native 操作系统机制来防止用户事先进行任何设置。 我为 SSH2 选择了 JSCH,为 Java 选择了 JACOB。我意识到
我正在尝试使用 java 和 Jacob 连接到远程计算机,以获取有关远程计算机的一些 WMI 信息。 对于本地主机,我使用下面的代码,它工作正常。 String host = "localh
我正在尝试使用 JACOB 与 COM 对象交互。 我能够调用对象的初始化方法(并获取其属性),但没有获取任何事件。代码引用如下。 我有一个示例 HTML+Javascript 页面(在 IE 中运行
我正在使用雅各布库。使用 jacob 库并遵循 this教程我可以在 Outlook 中添加联系人。现在我想使用 jacob 删除并更新该联系人。我想知道有什么方法可以使用 jacob 删除 Outl
我是一名优秀的程序员,十分优秀!