如何捕捉因调用WIN2000中没有的函数而发生的错误(200分)

  • 主题发起人 主题发起人 qiuxueting
  • 开始时间 开始时间
Q

qiuxueting

Unregistered / Unconfirmed
GUEST, unregistred user!
如WIN98下有这么个函数调用 ;
function ;RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord;
stdcall; external 'KERNEL32.DLL';
在WIN2000中没有这个函数,当在WIN2000下装载含有这个函数调用的程序时就会出错。
如何在程序中捕捉这个错误呢?(问的是如何捕捉,不是如何避免)
 
try
; re...
except
; //
...
end;
 
动态调用。
loadlibrary
这样能够好一些。
同时最好对程序有一个好的测试。
可以根据Windows的版本来确定使用哪一个函数。
 
其实每一个API函数都表明了适用范围,你可以先仔细看清楚再用!
 
平台判断
 
//补充:你必须声明函数的形式,例如:
type
; TSHAutoComplete = function(hwndEdit: HWND; dwFlags: DWORD): HRESULT stdcall;

//加在 implementation 后面就可以了
 
我改写的一段 TIEAddress 的程序,原来的程序中直接调用 'SHAutoComplete' 函数,
但在 Win95, IE4.0 的时候,shlwapi.dll 中没有这个函数,就会出错,改为动态调用侯就
可以避免

procedure TCustomUrlComboBox.CreateWnd;
const
; FileOptionsValues: array[TGFileOption] of Cardinal = (SHACF_FILESYSTEM, SHACF_URLHISTORY, SHACF_URLMRU);
var
; I: TGFileOption;
; Options: DWORD;
; LibraryHandle: THandle;
; FSHAutoComplete: TSHAutoComplete;
begin
; inherited CreateWnd;
; if not (csDesigning in ComponentState) then
; ; FUrlDropTarget.Register;
; PostMessage(Handle, CBEM_SETIMAGELIST, 0, FDefaultImageListHandle);
; Options:= 0;
; if csDesigning in ComponentState then Exit;

; if (FFileOptions <> []) then
; ; for I:= Low(TGFileOption) to High(TGFileOption) do
; ; ; if (I in FFileOptions) then Inc(Options, FileOptionsValues);

; if FUrlAutoSuggest = asForceOn then
; ; Inc(Options, SHACF_AUTOSUGGEST_FORCE_ON)
; else if FUrlAutoSuggest = asForceOff then
; ; Inc(options, SHACF_AUTOSUGGEST_FORCE_OFF);

; if FUrlAutoComplete = acForceOn then
; ; Inc(Options, SHACF_AUTOAPPEND_FORCE_ON)
; else if FUrlAutoComplete = acForceOff then
; ; Inc(Options, SHACF_AUTOAPPEND_FORCE_OFF);

; LibraryHandle:= LoadLibrary('shlwapi.dll');
; try
; ; if LibraryHandle <> 0 then
; ; begin
; ; ; FSHAutoComplete:= GetProcAddress(LibraryHandle, PChar('SHAutoComplete'));
; ; ; if Assigned(FSHAutoComplete) then FSHAutoComplete(EditHandle, Options);
; ; end;
; finally
; ; FreeLibrary(LibraryHandle);
; end;
end;
 
感谢yzhshi的赐教(50分),更感谢940801的代码实例(150分)。
 
getlasterror
 
后退
顶部