寫了一個ocx控制元件,呼叫了一些dll,有些是注冊需要的dll(叫A.dll),但有些是運行ocx需要的dll(B.dll),
現在的問題是,比如C程式呼叫了ocx控制元件,我必須把B.dll放到系統目錄或者C程式運行目錄,
我不想把B.dll放到系統目錄,但是問題來了 我現在不知道什么程式會呼叫我的ocx,也就不知道我的B.dll需要放在哪里,
這個問題怎么解決啊~
uj5u.com熱心網友回復:
.ocx依賴的dll只需要和.ocx放到一起就可以了uj5u.com熱心網友回復:
但是B.dll放到ocx的目錄下,提示加載B.dll失敗,我放到C程式運行目錄就可以成功加載uj5u.com熱心網友回復:
但是B.dll放到ocx的目錄下,提示加載B.dll失敗,我放到C程式運行目錄就可以成功加載
uj5u.com熱心網友回復:
用Depends看下你的C程式是不是也依賴B.dll了uj5u.com熱心網友回復:
不依賴啊,是ocx在初始化的時候要呼叫B.dll,但是通過C程式呼叫ocx時,ocx就會在c程式目錄找b.dll
uj5u.com熱心網友回復:
不科學,ocx依賴應該在ocx目錄下找才對,莫非你是用LoadLibrary指定當前行程的相對路徑?uj5u.com熱心網友回復:
提示你一下,如果你的 C 在遠程計算機上,難道你還要放在那個遠方的電腦里。所以最佳的做法是放在系統的目錄,包括你的 .ocx 檔案都應該放在系統目錄里面。
如果你此時實在不想放在系統目錄,此時你可以為 OCX 設定你自己的目錄,然后在注冊表項里面設定絕對路徑。
此時你參考的 .dll 如果僅僅是為 OCX 使用的,可以放在你期望放置的任何位置,但是絕對不是 C 所在位置,因為你不知道 C 是誰。
此時最好是像 OCX 那樣放在 .dll 所在的目錄或者是自己專門的目錄。
此時在你的 OCX 加載這個 .dll 時候,使用絕對路徑加載。這個絕對路徑可以是靜態的,也可以是動態的,但是你加載的時候,必須知道她到底在哪里。
如果你不能使用 LoadLibrary 手動加載,而是自動加載,那么使用 SetDllDirectory 設定加載路徑。
uj5u.com熱心網友回復:
沒有用loadlibrary,自動加載的,其實是用的bcg庫的一個風格dll,BCGPStyle2010Blue2210.dll這個dll是在C加載ocx的時候在系統目錄或者C的目錄下找的,而不是在ocx的目錄下找
uj5u.com熱心網友回復:
嗯 就是這樣的 我查下怎么設定ocx的dll加載目錄
uj5u.com熱心網友回復:
有個問題,是不是其它程式都是通過你的C運行程式來呼叫ocx的,還是直接呼叫OCX。但不管什么方式,只要是你的主行程呼叫ocx,只要把你的ocx依賴的dll庫放到主行程目錄下就可以了。uj5u.com熱心網友回復:
你要約定啊,你告訴用戶需要把dll防止在ocx同目錄下,這樣在用戶的安裝包中會按照這個處理的!uj5u.com熱心網友回復:
在dllmian開始時設定setdlldirectory試試uj5u.com熱心網友回復:
ocx用到的dll一般放在呼叫ocx程式的目錄,例如ie呼叫ocx ,ocx用到的dll放在ie目錄保證沒問題。uj5u.com熱心網友回復:
把dll放到Windows/system32下即可,64位系統放對應位置uj5u.com熱心網友回復:
1、解決方案就是ocx中設定dll加載路徑setdlldirectory2、還有就是ocx 使用動態加載dll的方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/59485.html
上一篇:VTK如何生成這種立體圖
