[英]Accessing a 32-bit COM DLL from a 64-bit Java Application (Registry Entry Not Found)
我試圖通過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位庫。 期間,永遠。 另一方面,你可以:
如果COM DLL是自動兼容的,您只需要設置DllSurrogate注冊表項。 COM子系統將啟動32位DllHost.exe,它將作為64位進程的out-proc COM服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.