delphi如何实现IObjectSafety接口让自己写的控件相对IE为安全控件

sunnysheng 2009-09-10 03:27:49
我在网上找了很久,也找到了些代码,但是都没有在IIS下实现成功(提示windows已经阻止此软件因为无法验证发行者)。
想来想去还是来发个贴。问问。到底delphi是如何实现ObjectSafety接口的。
各位大师们能不能给个具体的例子,我是实在没法子了。

网上找到的(测试了一下,不行)
unit UpdaterXImpl;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
ComObj, ActiveX, LesUpdater_TLB, StdVcl, Windows;

type
TUpdaterX = class(TAutoObject,IObjectSafety, IUpdaterX)
private
FObjectSafetyFlags: DWORD;
protected
procedure Start; safecall;
{ IObjectSafety }
function GetInterfaceSafetyOptions(const IID: TIID; pdwSupportedOptions,
pdwEnabledOptions: PDWORD): HResult; virtual; stdcall;
function SetInterfaceSafetyOptions(const IID: TIID; dwOptionSetMask,
dwEnabledOptions: DWORD): HResult; virtual; stdcall;
end;

implementation

uses ComServ, Main;

function TUpdaterX.GetInterfaceSafetyOptions(const IID: TIID;
pdwSupportedOptions, pdwEnabledOptions: PDWORD): HResult;
var
Unk: IUnknown;
begin
if (pdwSupportedOptions = nil) or (pdwEnabledOptions = nil) then
begin
Result := E_POINTER;
Exit;
end;
Result := QueryInterface(IID, Unk);
if Result = S_OK then
begin
pdwSupportedOptions^ := INTERFACESAFE_FOR_UNTRUSTED_CALLER or
INTERFACESAFE_FOR_UNTRUSTED_DATA;
pdwEnabledOptions^ := FObjectSafetyFlags and
(INTERFACESAFE_FOR_UNTRUSTED_CALLER or INTERFACESAFE_FOR_UNTRUSTED_DATA);
end
else begin
pdwSupportedOptions^ := 0;
pdwEnabledOptions^ := 0;
end;
end;

function TUpdaterX.SetInterfaceSafetyOptions(const IID: TIID; dwOptionSetMask,
dwEnabledOptions: DWORD): HResult;
var
Unk: IUnknown;
begin
Result := QueryInterface(IID, Unk);
if Result <> S_OK then Exit;
FObjectSafetyFlags := dwEnabledOptions and dwOptionSetMask;
end;
...全文
202 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
myy 2009-09-15
  • 打赏
  • 举报
回复
IObjectSafety 还是需要的,不然即使手工安装了,js在调用运行期IE还会弹一个框,问不安全是否执行之类的信息,用户必须点是才行。

你可以写个简单的html, 调用下 word.application 看看。
sunnysheng 2009-09-15
  • 打赏
  • 举报
回复
那是不是不实现ObjectSafety接口也无所谓?
蒋晟 2009-09-11
  • 打赏
  • 举报
回复
大部分都不是写给浏览器用的。
蒋晟 2009-09-11
  • 打赏
  • 举报
回复
这不能解决无法验证发行者的问题,要解决的话得去买一个证书来对控件进行签名。
sunnysheng 2009-09-11
  • 打赏
  • 举报
回复
据我了解,那好像大多数开发者写ocx控件都没有买证书的吧,应该不会都买的吧。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧