我用ATL写了一个控件,功能就是进行一系列的判断之后,要求下载一个dll文件,并对它进行注册,在VC里面编译的时候是对的但是后来把它放到网上,东西却没有下下来,但是自己写的那个控件却是注册好了的,请问这是为什么啊?
解决方案 »
- 转让几本计算机方面的书籍(北京)
- 我想手动调用列标控件的OnLvnColumnclick290baseErr(NMHDR *pNMHDR, LRESULT *pResult)这个函数,只是参数该怎么传递呢?
- 请教:CTreeCtrl有没有方法可以控制某一个Item项的图标显示或不显示
- 调试程序时在watch里为什么看不到变量的值
- 如何载list中添加字符(一个一个),如果是"\n",然后让他换行,在线等待
- 高分求助(600分)
- wtl问题??
- 为什么可序列化对象中调用GetObjectSchema总是返回-1?
- cmake编译错误是什么原因???
- 你需要驱动程序开发工具套装吗?
- 除了自己加输出,还有别的方法得到Release版的函数调用顺序、参数及执行时间
- 请教获得GUID的函数
我是用cabinet manager打包 东西装好后 就删掉了,你自己去网上下个吧 应该可以找到的虽然没有解决问题,还是谢谢你啊
上面有 public IObjectSafetyImpl<CMyATL, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
这个是不是实现了安全接口啊安全接口应该要怎么设置呢?拜托帮帮忙咯,很急啊
签名与否与失败没有关系, 如果只是测试, 直接用ocx测试就好, 没有必要打成CAB, 测试成功后再打包成CAB比较好
还有一种情况,就是你设计时选择了license,这样生成了一个lic文件,需要和ocx打包到同一个cab中再签名
这些是因为 客户端禁止运行了吗?但是我什么安全接口啊 还有IE那里好像都已经设置好类你说的另一种情况,我也不知道,我好像没有选择license,明天再看看呢
真是一头雾水啊,我是菜鸟一个,什么都不懂,问题也解决不了。tyong(伊面)
你说的 ,我明天也去试试看呢
我控件本身在VC里面是没有问题的呀,下载啊注册都可以实现的,就是到了网上用不了另外,实现安全接口是不是就只要
public IObjectSafetyImpl<Cmonitor, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
COM_INTERFACE_ENTRY(IObjectSafety)
这两句话在程序中就可以了吧?
#include <comcat.h>
#include <Objsafe.h>
const GUID CDECL BASED_CODE _ctlid =
{ 你控件的ID};
const CATID CATID_SafeForScripting =
{0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
const CATID CATID_SafeForInitializing =
{0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(void**)&pcr);
if (FAILED(hr))
return hr; // Make sure the HKCR\Component Categories\{..catid...}
// key is registered
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english // Make sure the provided description is not too long.
// Only copy the first 127 characters if it is
int len = wcslen(catDescription);
if (len>127)
len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated
catinfo.szDescription[len] = '\0'; hr = pcr->RegisterCategories(1, &catinfo);
pcr->Release(); return hr;
}// Helper function to register a CLSID as belonging to a component
// category
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by
// the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
} if (pcr != NULL)
pcr->Release(); return hr;
}STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS); if (FAILED( CreateComponentCategory(
CATID_SafeForScripting,
L"Controls that are safely scriptable") ))
return ResultFromScode(SELFREG_E_CLASS); if (FAILED( CreateComponentCategory(
CATID_SafeForInitializing,
L"Controls safely initializable from persistent data") ))
return ResultFromScode(SELFREG_E_CLASS); if (FAILED( RegisterCLSIDInCategory(
_ctlid, CATID_SafeForScripting) ))
return ResultFromScode(SELFREG_E_CLASS); if (FAILED( RegisterCLSIDInCategory(
_ctlid, CATID_SafeForInitializing) ))
return ResultFromScode(SELFREG_E_CLASS); return NOERROR;
}
别人说就OK了,但是我一直没有试成功。
浏览本地网页时可以正常下载、注册,在container test中也可以用,在网页中一直显示小红叉。
不知道是什么原因。
你是不是指定了版本自动升级包(CODEBASE)??
如果CODEBASE的路径无效是会出现红叉测试时,如果对html编程不熟悉, 强烈推荐使用Microsoft ActiveX Control Pad
我也觉得不是安全接口的问题,因为我都已经是设置好了的另外你说的 指定了版本自动升级包(CODEBASE)
是指html上指定吗?不关程序的事情吧 放到网上不是我弄的,另一个人负责的,他应该对html是很熟悉的
搞不懂现在的问题究竟是不是我这里产生的
首先,那个网页测试别人的控件都是可以的,唯独自己的不行。
其次,我在打开网页前,控件已经卸载了,打开之后在activex container中显示其已经注册,而且也是可以用的
另外我嵌入的是一个dll文件。现在的问题就是 我的dll没有得到运行,会是dll程序本身的问题吗?我在VC++里面调试 一切都很正常啊。
但是我现在自己的控件是可以注册了呀,照你的意思的话,就是它已经运行了?
但是运行的结果却没有呢还有你说 要在 在DllMain的DLL_PROCESS_ATTACH中下载你的dll 是不是我控件的操作都要在这里进行啊?