Delphi 呼叫 VB 開發的 ocx |
尚未結案
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
請教各位先進:我的開發工具是Delphi 5.0,現在import一個以VB開發的ocx,當使用其中一個方法PMIpcClient1.Init時,需要一個參數->hWnd,在Delphi的寫法如下
hWnd := FindWindow(nil, form_name);
PMIpcClient1.Init(hWnd);
compile沒問題,但執行時出現如下錯誤
Project ocx_sample.exe raised exception class EOleException with message 'OLE error 800A01A9'. Process Stopped. Use Step or Run to continue.
這個訊息以前也出現過,不過錯誤情況不同,不知道是不是VB寫的ocx有什麼地方與Delphi沖到或是不合,是否有那位先進可以代為解答,謝謝!!
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
這很可能是由於Delphi在替你的OCX產生Typelib(xxx_TLB unit)的時候,預設是
使用V-table 介面.不知道是VB或Delphi沒有處理好,以至於造成這樣的問題.
建議你用 disp 介面來取代 V-table.
以你的問題來舉例,請你找到一個 PMIpcClient1_TLB.pas的檔案.
並且去尋找_PMIpcClient1的字眼.
例如:
FintF: _PMIpcClient1;
Function GetControlInterface:_PMIpcClient1; property ControlInterface: _PMIpcClient1 read GetControlInterface; procedure TPMIpcClient1.CreateControl;
procedure DoCreate;
begin
FIntf := IUnknown(OleObject) as _PMIpcClient1;
end;
begin
if FIntf = nil then DoCreate;
end;
function TPMIpcClient1.GetControlInterface: _PMIpcClient1;
begin
CreateControl;
Result := FIntf;
end; 將以上這幾個地方的_PMIpcClient1用_PMIpcClient1Disp加以取代.
然後在編譯一次,如果沒法編譯成功,就把錯誤訊息中的_PMIpcClient1全部
換成_PMIpcClient1Disp在編譯一次應該就可以了. 要注意的事情是,你最好把改過這個PMIpcClient1_TLB.pas找個另外的地方存起來.
因為每次當你要re-import的時候.Delphi又會幫你產生一個PMIpcClient1_TLB.pas這樣會蓋掉你之前改的.
大概就是這樣,試試看吧~~ P.S 你真的是42歲的女生喔?? Best Regards,
Rex Chiu 發表人 - rexchiu 於 2004/04/23 15:46:52
------
Best Regards, Rex Chiu |
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |