希望有经验的朋友不吝赐教!在下十分感激!!
或者能提供相关的资料。
22 个解决方案
#1
修改注册表或是数字签名
#2
请求详解
#3
如果是你自己做的控件:
1.做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.实现IObjectSafetyImpl接口(方法网上有),使控件能无提示运行。
如果是 不是 你自己做的控件:
1.可以做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.如果IE运行时提示,没有办法,只能降级别。
1.做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.实现IObjectSafetyImpl接口(方法网上有),使控件能无提示运行。
如果是 不是 你自己做的控件:
1.可以做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.如果IE运行时提示,没有办法,只能降级别。
#4
控件是我自己做的,我做了数字签名,但必须降低安全等级后才能下载。对数字签名不熟,按照一个文档的方法照搬的,除了一个时间戳没有加上,其余都一模一样,但还是不行,报当前安全等级下禁止运行activex控件。说句实话,我还不理解数字签名,不知道到底是谁签的名,为什么他签了名,用户就信任了?网上查了很多资料,有的看不懂,有的又没什么帮助,不知道到底哪些资料才能解决问题,感觉有点无的放矢。希望能得到更有的帮助。
#5
俺以前有一贴子,讲这个的,在网络的faq里,不知还能不能打开
是讲activex form与网页的交互的
实际数字签名和实现安全接口都得做!
是讲activex form与网页的交互的
实际数字签名和实现安全接口都得做!
#6
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
#7
csdn的文档区里有篇文章,图文并茂,专门讲给ActiveX做数字签名的。搜索一下。
里面有“千中元”如何如何的。记不清了。
里面有“千中元”如何如何的。记不清了。
#8
1.做数字签名(用测试证书也行),
目的==> 使控件在默认的IE安全等级下能自动提示下载,没有数字签名时,
在默认的IE安全等级下,根本不会提示用户下载控件。
2.实现IObjectSafetyImpl接口(方法网上有),就是netqaz(netqaz)说的
目的==> 使控件在IE中运行(调用其方法或属性)时无安全提示对话框
请仔细看清楚我写的“目的”说明,每一个字!
目的==> 使控件在默认的IE安全等级下能自动提示下载,没有数字签名时,
在默认的IE安全等级下,根本不会提示用户下载控件。
2.实现IObjectSafetyImpl接口(方法网上有),就是netqaz(netqaz)说的
目的==> 使控件在IE中运行(调用其方法或属性)时无安全提示对话框
请仔细看清楚我写的“目的”说明,每一个字!
#9
不好意思各位,昨天突然接到新任务,本周没有时间搞这个了,下周四继续向各位请教。希望到时我能解心中疑惑。谢谢各位了!
#10
netqaz(netqaz)在2004-6-23 10:51:27写道:
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
我也很关注这个问题,如果这么简单就能解决问题倒是个很好的方案,可是发现COM_INTERFACE_ENTRY(IObjectSafety)这句话编译不过啊,netqaz能看看为什么吗?
谢了
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
我也很关注这个问题,如果这么简单就能解决问题倒是个很好的方案,可是发现COM_INTERFACE_ENTRY(IObjectSafety)这句话编译不过啊,netqaz能看看为什么吗?
谢了
#11
不可能吧,我现在就用这个办法,一点问题都没有.报什么错呢?
我用的是BCB6
我用的是BCB6
#12
用BCB5也没问题,比如我的是TActiveFormXOcxImpl,如下:
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
BEGIN_COM_MAP(TActiveFormXOcxImpl)
COM_INTERFACE_ENTRY(IObjectSafety)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormXOcx)
END_COM_MAP()
...
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
BEGIN_COM_MAP(TActiveFormXOcxImpl)
COM_INTERFACE_ENTRY(IObjectSafety)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormXOcx)
END_COM_MAP()
...
#13
我以前也做过,是要写接口的,太麻烦了。
#14
COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
#15
netqaz,我还是没能编过,BCB6,下面我把完整的代码贴出来,请帮我看看问题所在,谢啦。
编译提示:[C++ Error] ActiveFormImpl1.h(72): E2031 Cannot cast from 'TActiveFormXImpl *' to 'IObjectSafety *'
代码:
class ATL_NO_VTABLE TActiveFormXImpl:
VCLCONTROL_IMPL(TActiveFormXImpl, ActiveFormX, TActiveFormX, IActiveFormX, DIID_IActiveFormXEvents)
{
...
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
void InitializeControl()
{
...
}
BEGIN_COM_MAP(TActiveFormXImpl)
COM_INTERFACE_ENTRY(IObjectSafety)//add line
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormX)
END_COM_MAP()
编译提示:[C++ Error] ActiveFormImpl1.h(72): E2031 Cannot cast from 'TActiveFormXImpl *' to 'IObjectSafety *'
代码:
class ATL_NO_VTABLE TActiveFormXImpl:
VCLCONTROL_IMPL(TActiveFormXImpl, ActiveFormX, TActiveFormX, IActiveFormX, DIID_IActiveFormXEvents)
{
...
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
void InitializeControl()
{
...
}
BEGIN_COM_MAP(TActiveFormXImpl)
COM_INTERFACE_ENTRY(IObjectSafety)//add line
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormX)
END_COM_MAP()
#16
mark
#17
class ATL_NO_VTABLE TXXXImpl:
VCLCONTROL_IMPL(TXXXImpl, XXX, TXXX, IXXX, DIID_IXXXEvents)
,public IPersistPropertyBagImpl<TXXXImpl> // Add
{
void __fastcall ActivateEvent(TObject *Sender);
void __fastcall ClickEvent(TObject *Sender);
......
BEGIN_CATEGORY_MAP(TXXXImpl) //add
IMPLEMENTED_CATEGORY(CATID_SafeForScripting) //add
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) //add
END_CATEGORY_MAP() //add
BEGIN_COM_MAP(TXXXImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IXXX)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) // Add
END_COM_MAP()
BEGIN_PROPERTY_MAP(TXXXImpl)
// PROP_PAGE(CLSID_XXXPage)
//..... //加入你的属性
END_PROPERTY_MAP()
对照一下。还有,把下面这一段去掉
//$$---- activex control license support (stActiveXControlLicensing)
// Licensing support
//
typedef TLicenseString<TXXXLImpl> TLicenseClassImpl;
DECLARE_CLASSFACTORY2(TLicenseClassImpl)
// Add logic to determine whether this Control is properly licensed on this machine
// in the following method..
//
static const WCHAR* GetLicenseString()
{
return L"{87CD0B17-9786-48B1-9B5B-591DA52FABE0}";
}
static const TCHAR* GetLicenseFileName()
{
return _T("XXXProj1.lic");
}
static BOOL IsLicenseValid()
{
// By default we validate the license by verifying that the
// license string GUID is in the .LIC file generated by the Wizard.
//
// You may replace the logic of this routine to implement another
// method to verify that your control is properly licensed.
//
return TValidateLicense::IsGUIDInFile(GetLicenseString(), GetLicenseFileName());
}
VCLCONTROL_IMPL(TXXXImpl, XXX, TXXX, IXXX, DIID_IXXXEvents)
,public IPersistPropertyBagImpl<TXXXImpl> // Add
{
void __fastcall ActivateEvent(TObject *Sender);
void __fastcall ClickEvent(TObject *Sender);
......
BEGIN_CATEGORY_MAP(TXXXImpl) //add
IMPLEMENTED_CATEGORY(CATID_SafeForScripting) //add
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) //add
END_CATEGORY_MAP() //add
BEGIN_COM_MAP(TXXXImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IXXX)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) // Add
END_COM_MAP()
BEGIN_PROPERTY_MAP(TXXXImpl)
// PROP_PAGE(CLSID_XXXPage)
//..... //加入你的属性
END_PROPERTY_MAP()
对照一下。还有,把下面这一段去掉
//$$---- activex control license support (stActiveXControlLicensing)
// Licensing support
//
typedef TLicenseString<TXXXLImpl> TLicenseClassImpl;
DECLARE_CLASSFACTORY2(TLicenseClassImpl)
// Add logic to determine whether this Control is properly licensed on this machine
// in the following method..
//
static const WCHAR* GetLicenseString()
{
return L"{87CD0B17-9786-48B1-9B5B-591DA52FABE0}";
}
static const TCHAR* GetLicenseFileName()
{
return _T("XXXProj1.lic");
}
static BOOL IsLicenseValid()
{
// By default we validate the license by verifying that the
// license string GUID is in the .LIC file generated by the Wizard.
//
// You may replace the logic of this routine to implement another
// method to verify that your control is properly licensed.
//
return TValidateLicense::IsGUIDInFile(GetLicenseString(), GetLicenseFileName());
}
#18
感谢大家这么热烈的讨论!十分遗憾,昨天又有新的任务压身。估计有个几天好忙了。
不过请大家放心,这个问题压的胖子我好久,我一定会把这个问题搞清楚,也一定会结贴。希望大家多讨论,多发表意见,只要是能切中问题关键的,一定重分相酬,擦边相关的,也有一定分数酬谢。分不够了我再加,说话算话。
不过请大家放心,这个问题压的胖子我好久,我一定会把这个问题搞清楚,也一定会结贴。希望大家多讨论,多发表意见,只要是能切中问题关键的,一定重分相酬,擦边相关的,也有一定分数酬谢。分不够了我再加,说话算话。
#19
不行呀,上面大家的几种方法我都试验过了,还是提示安全等级不允许运行控件。
#20
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
要放在外面,是父类。注意看看我那个例子
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
要放在外面,是父类。注意看看我那个例子
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
#21
真是豁然开朗, 哈哈, 搞定, 多谢netqaz, 我这是借胖子的花献netqaz的佛啊
弱弱地问: 我怎么能给大家散分? 得新开主题?
弱弱地问: 我怎么能给大家散分? 得新开主题?
#22
谢谢大家!前段时间一直没有抽出时间来回复。很对不起呀!
接口问题解决了,不过签名还有问题。我用那个“千中元”如何如何的文档照做,还是不能下载。到底怎样才能让控件下载呀?
接口问题解决了,不过签名还有问题。我用那个“千中元”如何如何的文档照做,还是不能下载。到底怎样才能让控件下载呀?
#1
修改注册表或是数字签名
#2
请求详解
#3
如果是你自己做的控件:
1.做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.实现IObjectSafetyImpl接口(方法网上有),使控件能无提示运行。
如果是 不是 你自己做的控件:
1.可以做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.如果IE运行时提示,没有办法,只能降级别。
1.做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.实现IObjectSafetyImpl接口(方法网上有),使控件能无提示运行。
如果是 不是 你自己做的控件:
1.可以做数字签名(用测试证书也行),使控件在默认的安全等级能自动提示下载。
2.如果IE运行时提示,没有办法,只能降级别。
#4
控件是我自己做的,我做了数字签名,但必须降低安全等级后才能下载。对数字签名不熟,按照一个文档的方法照搬的,除了一个时间戳没有加上,其余都一模一样,但还是不行,报当前安全等级下禁止运行activex控件。说句实话,我还不理解数字签名,不知道到底是谁签的名,为什么他签了名,用户就信任了?网上查了很多资料,有的看不懂,有的又没什么帮助,不知道到底哪些资料才能解决问题,感觉有点无的放矢。希望能得到更有的帮助。
#5
俺以前有一贴子,讲这个的,在网络的faq里,不知还能不能打开
是讲activex form与网页的交互的
实际数字签名和实现安全接口都得做!
是讲activex form与网页的交互的
实际数字签名和实现安全接口都得做!
#6
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
#7
csdn的文档区里有篇文章,图文并茂,专门讲给ActiveX做数字签名的。搜索一下。
里面有“千中元”如何如何的。记不清了。
里面有“千中元”如何如何的。记不清了。
#8
1.做数字签名(用测试证书也行),
目的==> 使控件在默认的IE安全等级下能自动提示下载,没有数字签名时,
在默认的IE安全等级下,根本不会提示用户下载控件。
2.实现IObjectSafetyImpl接口(方法网上有),就是netqaz(netqaz)说的
目的==> 使控件在IE中运行(调用其方法或属性)时无安全提示对话框
请仔细看清楚我写的“目的”说明,每一个字!
目的==> 使控件在默认的IE安全等级下能自动提示下载,没有数字签名时,
在默认的IE安全等级下,根本不会提示用户下载控件。
2.实现IObjectSafetyImpl接口(方法网上有),就是netqaz(netqaz)说的
目的==> 使控件在IE中运行(调用其方法或属性)时无安全提示对话框
请仔细看清楚我写的“目的”说明,每一个字!
#9
不好意思各位,昨天突然接到新任务,本周没有时间搞这个了,下周四继续向各位请教。希望到时我能解心中疑惑。谢谢各位了!
#10
netqaz(netqaz)在2004-6-23 10:51:27写道:
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
我也很关注这个问题,如果这么简单就能解决问题倒是个很好的方案,可是发现COM_INTERFACE_ENTRY(IObjectSafety)这句话编译不过啊,netqaz能看看为什么吗?
谢了
为了避免弹出安全提示,要实现实现安全接口。很简单,增加两行代码:
在XXXimpl.h文件中增加以下代码:
class ATL_NO_VTABLE XXXImpl: ...
, public IObjectSafetyImpl<XXXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA> // Add
BEGIN_COM_MAP(XXXImpl)
COM_INTERFACE_ENTRY(IObjectSafety) // Add
...
END_COM_MAP()
我也很关注这个问题,如果这么简单就能解决问题倒是个很好的方案,可是发现COM_INTERFACE_ENTRY(IObjectSafety)这句话编译不过啊,netqaz能看看为什么吗?
谢了
#11
不可能吧,我现在就用这个办法,一点问题都没有.报什么错呢?
我用的是BCB6
我用的是BCB6
#12
用BCB5也没问题,比如我的是TActiveFormXOcxImpl,如下:
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
BEGIN_COM_MAP(TActiveFormXOcxImpl)
COM_INTERFACE_ENTRY(IObjectSafety)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormXOcx)
END_COM_MAP()
...
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
BEGIN_COM_MAP(TActiveFormXOcxImpl)
COM_INTERFACE_ENTRY(IObjectSafety)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormXOcx)
END_COM_MAP()
...
#13
我以前也做过,是要写接口的,太麻烦了。
#14
COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
#15
netqaz,我还是没能编过,BCB6,下面我把完整的代码贴出来,请帮我看看问题所在,谢啦。
编译提示:[C++ Error] ActiveFormImpl1.h(72): E2031 Cannot cast from 'TActiveFormXImpl *' to 'IObjectSafety *'
代码:
class ATL_NO_VTABLE TActiveFormXImpl:
VCLCONTROL_IMPL(TActiveFormXImpl, ActiveFormX, TActiveFormX, IActiveFormX, DIID_IActiveFormXEvents)
{
...
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
void InitializeControl()
{
...
}
BEGIN_COM_MAP(TActiveFormXImpl)
COM_INTERFACE_ENTRY(IObjectSafety)//add line
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormX)
END_COM_MAP()
编译提示:[C++ Error] ActiveFormImpl1.h(72): E2031 Cannot cast from 'TActiveFormXImpl *' to 'IObjectSafety *'
代码:
class ATL_NO_VTABLE TActiveFormXImpl:
VCLCONTROL_IMPL(TActiveFormXImpl, ActiveFormX, TActiveFormX, IActiveFormX, DIID_IActiveFormXEvents)
{
...
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
void InitializeControl()
{
...
}
BEGIN_COM_MAP(TActiveFormXImpl)
COM_INTERFACE_ENTRY(IObjectSafety)//add line
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFormX)
END_COM_MAP()
#16
mark
#17
class ATL_NO_VTABLE TXXXImpl:
VCLCONTROL_IMPL(TXXXImpl, XXX, TXXX, IXXX, DIID_IXXXEvents)
,public IPersistPropertyBagImpl<TXXXImpl> // Add
{
void __fastcall ActivateEvent(TObject *Sender);
void __fastcall ClickEvent(TObject *Sender);
......
BEGIN_CATEGORY_MAP(TXXXImpl) //add
IMPLEMENTED_CATEGORY(CATID_SafeForScripting) //add
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) //add
END_CATEGORY_MAP() //add
BEGIN_COM_MAP(TXXXImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IXXX)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) // Add
END_COM_MAP()
BEGIN_PROPERTY_MAP(TXXXImpl)
// PROP_PAGE(CLSID_XXXPage)
//..... //加入你的属性
END_PROPERTY_MAP()
对照一下。还有,把下面这一段去掉
//$$---- activex control license support (stActiveXControlLicensing)
// Licensing support
//
typedef TLicenseString<TXXXLImpl> TLicenseClassImpl;
DECLARE_CLASSFACTORY2(TLicenseClassImpl)
// Add logic to determine whether this Control is properly licensed on this machine
// in the following method..
//
static const WCHAR* GetLicenseString()
{
return L"{87CD0B17-9786-48B1-9B5B-591DA52FABE0}";
}
static const TCHAR* GetLicenseFileName()
{
return _T("XXXProj1.lic");
}
static BOOL IsLicenseValid()
{
// By default we validate the license by verifying that the
// license string GUID is in the .LIC file generated by the Wizard.
//
// You may replace the logic of this routine to implement another
// method to verify that your control is properly licensed.
//
return TValidateLicense::IsGUIDInFile(GetLicenseString(), GetLicenseFileName());
}
VCLCONTROL_IMPL(TXXXImpl, XXX, TXXX, IXXX, DIID_IXXXEvents)
,public IPersistPropertyBagImpl<TXXXImpl> // Add
{
void __fastcall ActivateEvent(TObject *Sender);
void __fastcall ClickEvent(TObject *Sender);
......
BEGIN_CATEGORY_MAP(TXXXImpl) //add
IMPLEMENTED_CATEGORY(CATID_SafeForScripting) //add
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) //add
END_CATEGORY_MAP() //add
BEGIN_COM_MAP(TXXXImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IXXX)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) // Add
END_COM_MAP()
BEGIN_PROPERTY_MAP(TXXXImpl)
// PROP_PAGE(CLSID_XXXPage)
//..... //加入你的属性
END_PROPERTY_MAP()
对照一下。还有,把下面这一段去掉
//$$---- activex control license support (stActiveXControlLicensing)
// Licensing support
//
typedef TLicenseString<TXXXLImpl> TLicenseClassImpl;
DECLARE_CLASSFACTORY2(TLicenseClassImpl)
// Add logic to determine whether this Control is properly licensed on this machine
// in the following method..
//
static const WCHAR* GetLicenseString()
{
return L"{87CD0B17-9786-48B1-9B5B-591DA52FABE0}";
}
static const TCHAR* GetLicenseFileName()
{
return _T("XXXProj1.lic");
}
static BOOL IsLicenseValid()
{
// By default we validate the license by verifying that the
// license string GUID is in the .LIC file generated by the Wizard.
//
// You may replace the logic of this routine to implement another
// method to verify that your control is properly licensed.
//
return TValidateLicense::IsGUIDInFile(GetLicenseString(), GetLicenseFileName());
}
#18
感谢大家这么热烈的讨论!十分遗憾,昨天又有新的任务压身。估计有个几天好忙了。
不过请大家放心,这个问题压的胖子我好久,我一定会把这个问题搞清楚,也一定会结贴。希望大家多讨论,多发表意见,只要是能切中问题关键的,一定重分相酬,擦边相关的,也有一定分数酬谢。分不够了我再加,说话算话。
不过请大家放心,这个问题压的胖子我好久,我一定会把这个问题搞清楚,也一定会结贴。希望大家多讨论,多发表意见,只要是能切中问题关键的,一定重分相酬,擦边相关的,也有一定分数酬谢。分不够了我再加,说话算话。
#19
不行呀,上面大家的几种方法我都试验过了,还是提示安全等级不允许运行控件。
#20
public:
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
要放在外面,是父类。注意看看我那个例子
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
IObjectSafetyImpl<TActiveFormXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>;//added line
要放在外面,是父类。注意看看我那个例子
class ATL_NO_VTABLE TActiveFormXOcxImpl:
VCLCONTROL_IMPL(TActiveFormXOcxImpl, ActiveFormXOcx, TActiveFormXOcx, IActiveFormXOcx, DIID_IActiveFormXOcxEvents), public IObjectSafetyImpl<TActiveFormXOcxImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
{....
#21
真是豁然开朗, 哈哈, 搞定, 多谢netqaz, 我这是借胖子的花献netqaz的佛啊
弱弱地问: 我怎么能给大家散分? 得新开主题?
弱弱地问: 我怎么能给大家散分? 得新开主题?
#22
谢谢大家!前段时间一直没有抽出时间来回复。很对不起呀!
接口问题解决了,不过签名还有问题。我用那个“千中元”如何如何的文档照做,还是不能下载。到底怎样才能让控件下载呀?
接口问题解决了,不过签名还有问题。我用那个“千中元”如何如何的文档照做,还是不能下载。到底怎样才能让控件下载呀?