This question은 32 비트 COM 클라이언트가 64 비트 COM 서버와 통신 할 수 있음을 나타냅니다. 서버가 out-of-process 인 경우). Java Com Bridge (JaCoB) 라이브러리를 사용하는 클라이언트를 구현하여이 방식으로 타사 out-of-process 서버와 통신하려고합니다. 이는 this question에 따라 가능해야합니다. 내가 사용 테스트 코드는 내가 프로세스 아키텍처 (32 비트 32 비트 또는 64 비트 64 비트에)와 일치하면 성공하지만,이 제외한 크로스 조합에 실패Java/JaCoB를 사용하여 out-of-proc 64 비트 서버와 통신하도록 32 비트 COM 클라이언트 가져 오기
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)
...
하나를 아이디어?
업데이트
예외를 디버깅 후 나는 기본 COM 오류가 DISP_E_BADCALLEE입니다 확신한다. 일부 웹 파기 후에 잘못된 메소드 서명이 가능한 원인을 발견 했으므로 여기에 몇 가지 세부 정보가 있습니다. COM 서버가 MATLAB이고 Execute
및 메서드를 호출하려고합니다. 다음은 OLE 형식의 COM 유형 시그니처입니다.
BSTR _stdcall Execute ([in] BSTR Name);
void _stdcall Quit();
그리고 여기 내 테스트 코드입니다 : 우리는 현재 COM 액세스 제어에 대한 Com4J을 사용하여 우리의 응용 프로그램에서
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();
}
그게 내가 두려워했던거야, 정보 주셔서 감사합니다. –