gpt4 book ai didi

java - 从 64 位 Java 应用程序访问 32 位 COM DLL(未找到注册表项)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:53:30 24 4
gpt4 key购买 nike

我正在尝试通过 64 位 Java 库调用 CoCreateInstance(...):org.eclipse.swt.internal.ole.win32.COM。我试图连接的 DLL 是一个用于 Visual SourceSafe 的 DLL。该项目的重点是将为 32 位 Eclipse 制作的 VSS 插件 (http://sourceforge.net/projects/vssplugin/) 移植到 64 位 Eclipse。

当我使用 64 位版本的 org.eclipse.swt.internal.ole.win32.COM 时,调用工作正常,但对于 32 位版本,调用失败。调用是这样使用的:

private void init(GUID guid) {
long[] ppv = new long[1];
int result = COM.CoCreateInstance(guid, 0, COM.CLSCTX_INPROC_HANDLER | COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER,
COM.IIDIDispatch, ppv);
if (result != COM.S_OK)
OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);
init(new OleAutomation(new IDispatch(ppv[0])));
}

调用失败并返回-2147221164,我猜这是某种错误代码,表明找不到相应的注册表项。

我尝试过的一些事情包括:

有人对此有什么建议吗?

最佳答案

CoCreateInstance 只是调用 LoadLibraryEx,它不能在 64 位进程中加载​​ 32 位库。期间,曾经。另一方面,您可以:

  1. 获取 com 组件的合法 64 位副本。
  2. 创建您自己的非进程内 COM 服务器,该服务器依次调用您已有的服务器,并调用 CoCreateInstance 获取其 ID。
  3. 创建一个包装这个东西的网络服务并使用 java 来调用它。
  4. 回到 32 位 Eclipse。

关于java - 从 64 位 Java 应用程序访问 32 位 COM DLL(未找到注册表项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com