全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2493
推到 Plurk!
推到 Facebook!

是否可以判斷系統版本來決定是否宣告方法?

答題得分者是:Coffee
SleepWalker
一般會員


發表:16
回覆:20
積分:12
註冊:2004-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-26 15:58:32 IP:220.229.xxx.xxx 訂閱
請問一下
由於Vista 的Registry 保護機制相容問題:
function RegisterTypeLib(tlib: ITypeLib; szFullPath, szHelpDir: POleStr): HResult; stdcall;
都要改成
function RegisterTypeLibForUser(tlib: ITypeLib; szFullPath, szHelpDir: POleStr): HResult; stdcall;

問題來了, 因為 Win2000SP4 的OleAut32.dll 為2.40.4522 版, 並不包含 RegisterTypeLibForUser , 所以會造成無法找到程式輸入點的BUG.

有沒有辦法判斷Vista 才在宣告時宣告 RegisterTypeLibForUser 呢?

PS: 沒有辦法幫每台電腦都手動換OleAut32 @@
編輯記錄
SleepWalker 重新編輯於 2007-06-26 15:59:51, 註解 無‧
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-26 16:02:24 IP:220.130.xxx.xxx 訂閱
Refer Help for "compiler directives"
and here's a similar example
more example in the component you installed.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
SleepWalker
一般會員


發表:16
回覆:20
積分:12
註冊:2004-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-26 16:05:20 IP:220.229.xxx.xxx 訂閱
關於 IFDEF 這邊我有稍微研究過了一下 
他的判斷指支援
    - COMPILER VERSION
  • VER80 - Delphi 2
  • VER100 - Delphi 4
  • VER130 - Delphi 6
  • VER150 - Delphi 8
  • VER170 - Delphi 2006
  • VER180 - Delphi 2007
  • WIN32 - Indicates that the operating environment is Linux
  • MSWINDOWS - Indicates that an application is being compiled as a console application

如果用Ver 並不符合我的需求, 但是WIN32, MSWINDOWS 等也無法區別是否為VISTA ><

Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-26 16:29:38 IP:220.130.xxx.xxx 訂閱
唔..對不起,是我搞錯了,
你應該是要在Runtime的時候判別..
這篇 是總整理,多搜尋一下就會有了..
將原連結的cid複製,用新連結的tid取代即可看到原文
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2007-06-26 16:30:17, 註解 無‧
Coffee 重新編輯於 2007-06-26 16:30:36, 註解 改錯字XD‧
SleepWalker
一般會員


發表:16
回覆:20
積分:12
註冊:2004-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-27 10:40:22 IP:220.229.xxx.xxx 訂閱
謝摟,  跟大家分享一下我的用法:

動態載入


procedure DoSomeThing();
var
DllHandle: THandle;
RegisterTypeLibForUser: function(tlib: ITypeLib; szFullPath, szHelpDir: POleStr): HResult stdcall;
begin
if isVista() then
begin

DllHandle := LoadLibrary('oleAut32.dll');
@RegisterTypeLibForUser := GetProcAddress(DllHandle, 'RegisterTypeLibForUser');

if @RegisterTypeLibForUser <> nil then
begin
Result := RegisterTypeLibForUser(ITypeUse, @swFile[1], nil) = S_OK;
end else
begin
Result := False;
end;

FreeLibrary(DllHandle);

end;


end;


編輯記錄
SleepWalker 重新編輯於 2007-06-27 10:41:03, 註解 無‧
SleepWalker 重新編輯於 2007-06-27 10:41:42, 註解 無‧
系統時間:2024-03-28 19:52:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!