MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   使用Java / JaCoB获取32位COM客户端与进程外64位服务器进行对话 (https://www.labfans.com/bbs/showthread.php?t=26653)

poster 2019-12-14 20:38

使用Java / JaCoB获取32位COM客户端与进程外64位服务器进行对话
 
[URL="https://stackoverflow.com/questions/3148039/com-client-server-cross-64-32-bit-processes"]此问题[/URL]表明,如果服务器不在进程内,则32位COM客户端有可能与64位COM服务器通信(反之亦然)。我正在尝试使用Java Com Bridge(JaCoB)库来实现一个客户端,以这种方式与第三方进程外服务器进行通信,根据[URL="https://stackoverflow.com/questions/359807/how-do-i-use-a-32-bit-com-object-from-a-64-bit-process"]这个问题[/URL] ,这应该是可能的。如果我匹配流程体系结构(32位至32位或64位至64位),则我正在使用的测试代码成功,但由于以下原因,任何交叉组合均失败:

Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: Execute Description: Invalid callee. at com.jacob.com.Dispatch.invokev(Native Method) at com.jacob.com.Dispatch.invokev(Dispatch.java:858) at com.jacob.com.Dispatch.callN(Dispatch.java:455) at com.jacob.com.Dispatch.call(Dispatch.java:544) at com.jacob.activeX.ActiveXComponent.invoke(ActiveXComponent.java:447) ... 有任何想法吗?

[B]更新资料[/B]

在调试异常之后,我可以肯定地确定潜在的COM错误是[URL="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vsconstants.disp_e_badcallee.aspx"]DISP_E_BADCALLEE[/URL] 。经过一番网络挖掘后,我发现一个可能的原因是无效的方法签名,因此这里有更多详细信息。 COM服务器是MATLAB,我正在尝试调用Execute和Quit方法。这是它们的COM类型签名(来自OLEView):
[INDENT] BSTR _stdcall Execute([in] BSTR名称);
void _stdcall Quit();

[/INDENT]这是我的测试代码:

public static void main(String[] args) { ActiveXComponent ml = new ActiveXComponent("Matlab.Application.Single.7"); System.out.println(ml.invoke("Execute","version")); ml.invoke("Quit"); ml.safeRelease(); }

[B]回答:[/B]

在我们的应用程序中,我们当前使用Com4J进行COM控件访问,但是我们注意到某些ActiveX控件的实现调度功能执行得很差(如果我正确理解的话),因此如果使用以下命令,则必须为每个控件进行选择:
[LIST][*] Com4J直接访问它[*] COM控件的VB6包装器,其中引用了COM控件,但是我们必须公开所调用方法的包装器,并从Com4J调用这些方法[/LIST]或者,用于OLE嵌入
[LIST][*] SWT COM旅。[/LIST]我以前曾与Jacob合作,但它似乎非常不稳定(至少对于我一段时间前尝试过的ActiveX控件而言)。



[url=https://stackoverflow.com/questions/4648943]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:48

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.