在win64位下安裝MXComponent軟體,但它只注冊了32位的版本,在Delphi中安裝了 該軟體的32位activex控制元件,編成32位的程式使用沒有問題。但編成64位的程式,編譯能通過,就是運行程式的時候,提示 類沒有注冊。搞了幾天了,都沒有搞清楚要怎么弄?
1 能否在64位中重新注冊一個32位的activex組件?
2 能否編一個32位的dll呼叫該activex,然后再由64位程式呼叫該32位的dll?
請高人指教,謝謝
uj5u.com熱心網友回復:
實在是太難了,不知道怎么弄。請指教uj5u.com熱心網友回復:
32位應用程式只能呼叫32位的ActiveX64位應用程式只能呼叫64位的ActiveX
uj5u.com熱心網友回復:
ActiveX/OCX是可以32/64位互操作的,普通DLLs不行。uj5u.com熱心網友回復:
ActiveX與應用程式是在同一個行程里面。如果其中一個使用32bit地址空間,另外一個可以使用64bit地址空間?uj5u.com熱心網友回復:
你可以試一下:https://www.codeproject.com/tips/267554/using-bit-com-object-from-bit-application
By modifying the Registry, you can allow a 64-bit app to use a 32-bit COM object.
Locate your COM object GUID under HKey_Classes_Root/Wow6432Node/CLSID.
Once located, add a new REG_SZ (string) value. The name should be AppID and the data should be the same COM object GUID you have just searched for.
Add a new key under HKey_Classes_Root/Wow6432Node/AppID. The new key should be called the same as the COM object GUID.
Under the new key you just added, add a new REG_SZ (string) value, and call it DllSurrogate. Leave the value empty.
Create a new key under HKey_Local_Machine/Software/Classes/AppID, if it doesn't already exist. Again, the new key should be called the same as the COM object's GUID. No values are necessary to be added under this key.
uj5u.com熱心網友回復:
那已經是通過一個代理去呼叫了,而不是直接呼叫了。uj5u.com熱心網友回復:
64位就得使用64位activex控制元件,64位向下兼容,只是64位可以執行32位程式。純64位程式,就得使用64位的控制元件。
uj5u.com熱心網友回復:
對應用程式來說,呼叫是同樣的,ActiveX/OCX本來就不是直接呼叫,而是通過COM介面呼叫,介面只是一個指標,實際的方法呼叫是由系統層面完成的,與代理無關。因為COM server支持兩種運行模式:in process和out of process,后者就支持32/64位互操作,之所以需要設定一下注冊表,是因為win64中實際有兩個注冊表,一個用于64位應用,另一個用于32位應用,注冊64位ActiveX組件時只注冊到了64位注冊表部分,32位也一樣,所以默認情況下64位程式找不到32位ActiveX。理論上來說,所有基于COM規范的二進制介面實作,諸如OLE、OCX(OLE Control Extension)、ActiveX(ActiveX實際只是一個推廣名,技術上是OLE Automation Server)都可以實作32/64位互操作,比如實測寫一個win64程式,OLE打開word2003正常。
uj5u.com熱心網友回復:
普通DLLs之所以不能32/64位互操作,是因為普通DLLs只能in process,在呼叫者的地址空間中運行。uj5u.com熱心網友回復:
ActiveX/OCX是可以32/64位互操作的,普通DLLs不行。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39571.html
