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ビットJavaアプリケーションから32ビットCOM DLLにアクセスする(レジストリエントリが見つかりません)
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を返します。
私が試したいくつかのもの
が含まれます:- このレジストリハック:http://www.gfi.com/blog/32bit-object-64bit-environment/
- 登録解除/登録します。regsvr32.exeの32ビット版と64ビット版とDLL
誰にもこれに関するアドバイスがありますか?
申し訳ありませんが、それはひどい、落胆した対応です。明らかに不可能ではありません:http://stackoverflow.com/questions/2925479/ways-to-wrap-32-bit-dll-so-it-will-work-in-a-64-bit-os – kwikness
@kwikness、申し訳ありませんが、64ビットプロセスで32ビットのlibを読み込むことはできません。 32ビットプロセスでラップして、RMIやあなたの気持ちを伝えることができます。しかし、インプロセスで読み込むことはできません。 – bestsss
私はそのような解決策に反対していることは一度も言いませんでしたが、これは1つのSOのポストのために非常に無意味なスマート・アレックです。 更新された返信用bmarguliesありがとうございます。 – kwikness