电脑爱好者之家

当前位置: 主页 > 开发资料 > 程序设计教程 >

制作并导出ActiveX对象需要做以下事情

时间:2014-02-09 23:57来源:未知 作者:机器AI 点击:
制作并导出ActiveX对象需要做以下事情: 初始化要导出的对象 初始化OLE。 要使用COM的剪贴板、拖放、OLE和In-place激活等功能,必须先初始化COM库。 CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线

制作并导出ActiveX对象需要做以下事情:  
   
  初始化要导出的对象    
   
  初始化OLE。  
   
  要使用COM的剪贴板、拖放、OLE和In-place激活等功能,必须先初始化COM库。    
  CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线程模式。参数必须为NULL。    
  CoInitializeEx(LPVOID),新版本,可以用参数指定协同模式,如多线程模式,但。    
  注意单元的协同模式是不能改的,如果在已经初始化为多线程的单元里初始化OLE将失败并返回RPC_E_CHANGED_MODE。    
  每个线程只要调用一次初始化就够了,同一线程中的后续调用也将通过,但会返回S_FALSE。    
  后面解除初始化调用要与本调用一一对应,返回S_FALSE的CoInitialize调用也计算在内。    
  应用程序的第一个线程将调用CoInitializeEx(COINIT_APARTMENTTHREADED或0),必须是最后一个解除初始化的。    
  如果不按上面的顺序进行初始化/解除函数调用,在该单线程单元(STA)里后续的初始化调用将失败,应用程序将无法工作。    
  由于无法控制本地服务器的载入/御载顺序,在DLLMain里调用初始化/解除函数是不安全的。    
  注册要导出的对象的类工厂。    
  类工厂为客户端创建活动对象实例,必须先注册到系统中以便客户端引用。    
  多用途EXE型对象应用程序必须先建立类对象(with   IClassFactory接口)。    
  CoRegisterClassObject为EXE型对象注册到OLE以便其它应用可以连接上它。EXE对象应用程序应当在启动时就调用它。    
  如果EXE或EXE用到的DLL需要用到一些内部对象,也可用CoRegisterClassObject来注册。    
  对象处理器(Handler)或DLL型应用不可调用CoRegisterClassObject,而应实现并输出DLLGetClassObject方法    
  注册活动对象(active   object).    
  RegisterActiveObject(Unknown   FAR*   punk,   REFCLSID   rclsid,   DWORD   dwFlags,   unsigned   long   FAR*   pdwRegister   );用于注册活动对象。    
  参数punk指向的对象被注册为clsid代表类型的活动对象(ActiveObject)。    
  注册导致该对象被列表到COM系统的正在运行对象表(ROT)中。该查找表用来跟踪系统中当前运行着的对象。    
  Active对象可以用两种方式停止:    
  可视对象:收到来自GUI或Client端的终止命令(Quit、Exit等)时。    
  不可视对象:最后一个外部连接消失时。    
  Active对象可以用强、弱两种方式进行注册,默认为强注册。    
  ACTIVEOBJECT_STRONG:在对象上执行AddRef,使ROT中的对象与对应的Stub引用计数加一,需要使用RevokeActiveObject显式从表中解除。    
  ACTIVEOBJECT_WEEK:在ROT中建立对象指针,但不增加引用计数,因此当指向弱对象的最后一个外部连接消失时,COM系统将释放对象的Stub,对象本身也不再可用。    
  要确保得到渴望的行为,不仅要考虑OLE的标准活动,还要考虑以下活动:    
  尽管代码可以编写不可视对象,该对象随还是有可能变成可视。一旦变得可视,它将保持可视、活动,直到显式收到GUI或Client的终止命令。这在代码中的引用消失时就可能发生。    
  其它的ActiveX对象可能使用该对象。如果是这样,该代码不应该强制对象终止。    
  为避免可能出现的冲突,应该总是将ActiveX对象注册为ACTIVEOBJECT_WEEK,必要时还要调用CoLockObjectExternal确保对象保持活动。    
  绝大多数情况下,当ActiveX对象变得可视时应该调用CoLockObjectExternal,以保证对象处于活动状态,直到用户要求它停止。终止一个Active对象应当遵循以下步骤:    
  当对象可视时为用户锁定对象:CoLockObjectExternal(punk,   TRUE,   TRUE)    
  当用户要求终止对象时解锁:CoLockObjectExternal(punk,   FALSE,   FALSE)    
  调用RevokeActiveObject停止对象活动    
  如果要结束所有远程进程对该对象的链接:CoDisconnectObject(punk,   0)    
===================================

 

ActiveX文档在WEB上的应用  
   
    向WEB页面中加入ActiveX文档,首先要将该ActiveX文档包装成CAB文件。由于InternetExplorer读入ActiveX文档时,该文档将取代当前的WEB页,因此,一般将ActiveX文档(即HTML的标记OBJECT)放在一个独立的HTML文件中。例如,下面这条语句建立了一个超链接:  
   
   
  <AhRef="ActiveXDoc.htm">LinktoaActiveXDocument</A>  
   
  其中,ActiveXDoc.htm是下载ActiveX文档的HTML文件:  
   
   
  <OBJECT  
   
  classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4"  
   
  codebase="ActiveXDoc.cab#version=1,0,0,0">  
   
  </OBJECT>  
   
   
  这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。  
   
  14、VisualBasic代码部件在WEB上的应用  
   
    VisualBasic代码部件包括ActiveXDLL和ActiveXEXE,它们可以在服务器端运行,也可以从客户端下载再运行。  
   
    如果某个ActiveXDLL运行在服务器端,服务器上运行的是InternetInformationServer,则可以使用VB的OLEISAPI2.DLL提供的函数进行访问,或者基于ActiveServerPages使用VBScript或者JScript。  
   
    如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0企业版生成了一个ActiveXDLL:MyDLL.DLL,它只有一个类:MyClass,其唯一的方法是显示LogIn对话框。用SetupWizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载MYDLL.CAB:  
   
   
  <OBJECTID=MyClass  
   
  CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7"  
   
  CODEBASE="mydll.cab">  
   
  </OBJECT>  
   
   
  <INPUTTYPE=buttonVALUE="LogInNOW"NAME="BtnLogin">  
   
   
  <!--  
   
  Whenthebuttonisclicked,callthe"LogIn"method.  
   
  -->  
   
  <SCRIPTlanguage="VBScript">  
   
  <!--  
   
  SubWindow_OnLoad  
   
  MyClass.Login  
   
  EndSub  
   
  SubBtnLogin_OnClick()  
   
  MyClass.Login  
   
  EndSub  
   
  -->  
   
  </Script>  
   
   
    其中,ObjectID是这个ActiveXDLL中某个类的名字。当此WEB页面被下载并显示时,MyClass类的方法LogIn将被调用,并在客户端显示LogIn对话框。  
   
  15、VisualBasic6.0  
   
    Microsoft计划于1998年9月推出VisualBasic6.0。目前Beta版正在测试。VB6.0与VB5.0相比,除继续支持InternetExplorerDocumentObjectModel(DOM)开发之外,将提供两个令人兴奋的新功能:  
   
    *DynamicHTML编辑器  
   
    开发人员可以象编制普通VB程序一样,制作DHTML文件或模板。  
   
    *WebClasses;  
   
    开发人员可以在WEB服务器端建立与ASP文件一一对应的WebClass类,每个类都可以访问ASP对象,在VisualBasicIDE中跟踪调试,并生成ISAPI动态连接库。  

(责任编辑:机器AI)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容
  • 正则表达式学习与分析

    入门 \b 是正则表达式规定的一个特殊代码(好吧,某些人叫它 元字符,metacharacter ...

  • Scriptlets和HTML混合

    Scriptlets和HTML的混合 在一个scriptlet中使用了out变量来产生HTML输出。对于更复杂...

  • .NET正则匹配模式

    概述 匹配模式指的是一些可以改变正则表达式匹配行为的选项或修饰符。不同的语言支持...