ocx控件制作步骤
vb开发ocx实例 -回复
vb开发ocx实例-回复VB开发OCX实例在这篇文章中,我将会讲解如何使用VB开发一个OCX控件的实例。
通过这个实例,您将会了解到如何创建一个OCX控件,并将其集成到现有的应用程序中。
让我们来逐步进行操作。
第一步:创建一个VB项目首先,在您的开发环境中创建一个新的VB项目。
打开VB开发工具,选择"新建项目"。
在弹出的对话框中,选择"Windows Forms 应用程序",输入项目名称,并选择一个存储位置。
第二步:添加一个ActiveX控件在VB项目中,右键单击项目名称,选择"新增项"。
在弹出的对话框中,选择"ActiveX 控件",并填写控件的名称。
接下来,单击"添加"按钮,将控件添加到您的项目中。
第三步:设置控件属性在VB项目中,打开您所创建的控件。
在解决方案资源管理器中,找到您的控件文件,右键单击并选择"属性"。
在属性窗口中,您可以设置控件的各种属性,如名称、版本、描述等。
根据您的项目要求进行相应的设置。
第四步:设计控件界面在VB项目中,打开您的控件文件。
在控件设计器中,您可以设计控件的用户界面。
您可以添加按钮、文本框、标签等控件,并设置它们的属性和事件处理程序。
这将为用户提供一个可交互的界面。
第五步:编写控件代码在VB项目中,打开您的控件文件。
在代码编辑器中,您可以编写控件的代码逻辑。
使用VB语言,您可以定义属性、方法和事件,以实现控件的功能。
您还可以调用其他库或组件,以增加控件的功能性。
第六步:编译控件在VB项目中,选择"生成"->"生成解决方案",以编译您的控件项目。
如果编译成功,将会生成一个OCX文件,该文件包含了您所创建的控件。
第七步:在应用程序中使用控件现在,您已经成功地创建了一个OCX控件。
接下来,您可以将该控件集成到现有的应用程序中。
调用ocxActiveX控件详解(做一个简单的ocx控件)
调⽤ocxActiveX控件详解(做⼀个简单的ocx控件)最近做的项⽬都和插件有关,就是在页⾯中调⽤插件的⽅法,然后进⾏操作。
插件就是ocx ActiveX控件,具体的说明可以⾃⼰去了解⼀下,在这⾥就不做赘述。
具体调⽤⽅式很简单:1、在页⾯中写⼀个object标签,标签中定义⼀个classid属性,这个属性是获取到插件的关键<object id="ocx" classid="clsid:c998ae90-5ffc-4a58-97d2-490a414bd6e5"></object>2、直接在js中获取到这个dom,然后就可以调⽤插件中的⽅法let ocx = document.getElementById("ocx");let sum = ocx.Add(1,2);在使⽤过程中遇到了很多问题,于是⾃⼰去摸索了⼀下如何制作⼀个ocx插件,也能够帮助⾃⼰加深⼀些使⽤⽅⾯的了解。
这⾥使⽤Visual Studio Community 2019,先下载必须的组件和依赖包。
使⽤C++的桌⾯开发和Visual Studio扩展开发这两项必须要勾选。
然后桌⾯开发中还需要勾选与MFC相关的库,如果不勾选的话⽆法新建MFC项⽬勾选完成后就开始下载相关的包,这个过程需要等待⼀会。
下载完成后就可以开始新建⼀个项⽬,在这⾥选择MFC ActiveX控件,命名为MyMFCActiveXControl然后就会⽣成⼀系列控件名,头⽂件等等的⽂件名,这⾥基本上不⽤做什么操作,直接完成就好。
唯⼀需要注意的是⼀个控件类型ID,这个ID我们后⾯会⽤到。
点击完成后,就会⽣成⼀系列与插件相关的⽂件,这些⽂件⾥⾯包含了插件的类,头⽂件,描述等信息。
因为不是专门学习C++的,不对⾥⾯的原理和结构进⾏探究,就取我需要的内容就⾏。
来找⼀找那个神奇的classid。
C#生成ocx控件
用C#编写ActiveX控件(一)前些日子做一个Web项目,必须自己编写一个ActiveX控件。
如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX 控件。
首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图:UserControl1.cs内容如下:using System;using System.Collections;using ponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;namespace HelloWorld{///<summary>/// UserControl1 的摘要说明。
///</summary>public class Demo : erControl{private bel label1;///<summary>///必需的设计器变量。
///</summary>private ponentModel.Container components = null;public Demo(){// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();// TODO: 在 InitComponent 调用后添加任何初始化}///<summary>///清理所有正在使用的资源。
///</summary>protected override void Dispose( bool disposing ){if( disposing ){if( components != null )components.Dispose();}base.Dispose( disposing );}组件设计器生成的代码}}此时编译项目,可以生成HelloWorld.dll。
vb开发ocx实例
vb开发ocx实例【最新版】目录1.什么是 OCX?2.VB 开发 OCX 实例的过程3.OCX 控件的使用方法4.总结正文一、什么是 OCX?OCX(Object Control Extension)是一种可重用的软件组件,它是由 Microsoft 开发的一种 COM(Component Object Model)控件技术。
OCX 控件可以在不同的编程语言和平台之间进行互操作,这使得开发人员可以更轻松地创建具有丰富功能的应用程序。
二、VB 开发 OCX 实例的过程1.创建一个新的 ActiveX 控件库项目首先,在 Visual Basic 中创建一个新的 ActiveX 控件库项目。
这可以通过选择“新建”>“ActiveX 控件库”来实现。
2.设计 OCX 控件接下来,设计 OCX 控件。
这包括为控件添加属性、方法和事件。
例如,可以添加一个名为“HelloWorld”的按钮,当单击该按钮时,会触发一个名为“OnButtonClick”的事件,并显示一条消息框。
3.编译和测试 OCX 控件完成控件设计后,编译并测试 OCX 控件。
这可以通过选择“编译”来实现。
如果编译成功,将生成一个名为“YourControl.ocx”的文件。
4.在 VB 应用程序中使用 OCX 控件现在,可以将 OCX 控件添加到 VB 应用程序中。
首先,将生成的“YourControl.ocx”文件复制到应用程序项目的“Controls”文件夹中。
然后,在 Visual Basic 中引用该控件,并在窗体上添加一个实例。
三、OCX 控件的使用方法1.引用 OCX 控件在 VB 代码中引用 OCX 控件,需要使用“Imports”语句。
例如,要引用上面创建的“YourControl.ocx”控件,可以添加以下代码:```Imports YourControl```2.创建 OCX 控件实例在 VB 代码中创建 OCX 控件实例,需要使用“CreateObject”函数。
vb开发ocx实例
vb开发ocx实例【原创版】目录1.OCX 控件的概述2.VB 开发 OCX 控件的步骤3.创建 OCX 控件4.在 VB 中使用 OCX 控件5.测试和调试 OCX 控件正文一、OCX 控件的概述OCX(Object Control Extension)控件是一种可重用的软件组件,可以用于开发各种应用程序。
它们是基于 COM(Component Object Model)技术的,可以在不同的编程语言和平台之间进行交互。
OCX 控件在 Visual Basic(VB)开发中非常常用,可以为程序增加功能和特性。
二、VB 开发 OCX 控件的步骤1.创建 OCX 控件:首先,需要使用适当的开发工具(如 Visual Studio)创建一个新的 OCX 控件项目。
在项目中,可以编写控件的属性、方法和事件处理程序等代码。
2.编译 OCX 控件:在开发过程中,需要定期编译 OCX 控件以确保没有错误。
编译完成后,会生成一个 OCX 文件,该文件包含了控件的二进制代码和相关资源。
3.在 VB 中使用 OCX 控件:在 VB 项目中,需要引用刚才创建的OCX 控件。
这可以通过在项目属性中的“引用”选项卡中添加 OCX 文件来完成。
4.测试和调试 OCX 控件:在 VB 项目中使用 OCX 控件后,需要对控件进行测试和调试,以确保其功能和性能符合预期。
三、创建 OCX 控件在创建 OCX 控件时,需要遵循以下步骤:1.打开 Visual Studio,并创建一个新的 ActiveX 控件项目。
2.在项目中添加控件的属性、方法和事件处理程序等代码。
3.编译项目,生成 OCX 文件。
四、在 VB 中使用 OCX 控件在 VB 中使用 OCX 控件,需要执行以下操作:1.打开 VB 项目,并在工具箱中找到 OCX 控件。
2.将 OCX 控件拖放到 VB 窗体上,并调整其大小和位置。
3.在代码中引用 OCX 控件,并设置其属性值。
ocx控件开发过程
目录1. 参考资料: (2)2. 控件制作过程: (2)3.控件进行打包并进行数据鉴名 (3)4. 写html,完成程序 (5)1 / 51.参考资料:(1)利用VC6.0的向导创建一个ocx控件的示例(2)vc6<实用>开发activex并发布全攻略(二)(初级篇)网址:/ibznphone/article/details/8066322 2. 控件制作过程:(1) 打开vc6.0,新建一个MFC ActiveXControlWizard项目:(2) 在项目中添加自定义方法sayhello(3)对项目进行测试打开vc的工具->ActiveX Control Test Container菜单。
选择MyActivex控件,然后再选择Control->InvokeMethods选项:可以看到返回值是“hello!”,系统sayhello函数是可以使用的。
注:最后在html加载控件需要classid,此控件classid为7F8BB7A3-A741-4E53-A620-5442A789D7B5。
3.控件进行打包并进行数据鉴名(1) 控件制作完毕并不能直接使用,而是需要注册,手动注册的方法不必赘述,我参考本文3 / 5列的第二篇参考资料用makeCAB工具包进行处理。
下图为各种证书文件和cab打包文件生成后的情景。
(2) 使用makeCAB工具包中的Code Signing Wizard签署CAB文件细节就不写了,详细在参考资料2,后面的个图为签名成功的截图。
4. 写html,完成程序下面为html代码:<HTML><HEAD><META NAME="GENERA TOR" Content="Microsoft Visual Studio 6.0"><TITLE></TITLE><script language="JavaScript">function button1_click(){var object = card.sayhello();alert(object);}</script></HEAD><BODY><P><INPUT id=button1 type=button value=Button name=button1 onClick="button1_click()"><div style="display:none"><OBJECT id="card" classid="clsid:7F8BB7A3-A741-4E53-A620-5442A789D7B5" CODEBASE="hello.cab"></OBJECT></div></P></BODY></HTML>5 / 5。
OCX控件编写
OCX控件新建->项目->MFCActiveX完成后编译器自动添加四个类。
型如:一.事件的添加方法:1.常用事件右键Ctrl类->添加->添加事件->常用事件(Click事件为例)在其他程序调用控件时在控件事件中就可以添加Click事件。
在点击新建的对话框中的控件时就会执行Click事件函数。
如下图2.自定义方法右键.lib类的第一个节点->添加方法添加后在其他程序调用控件时就可以给控件添加变量并调用方法。
二.添加属性以背景色为例,右键Lib类的第一个节点,添加属性,选择常用属性中的BackColor属性(当然也可以自定义属性):在Listcpp中手动添加属性页代码:在OnDraw手动添加:其中上图圈出部分为手动添加的代码,用于当控件被调用时打开改控件的颜色属性面板改变控件的颜色。
而COLORREF col=TranslateColor(GetBackColor);这行代码实现了获取下图颜色面板的颜色并返回给col;如何在新程序中添加控件并实时改变控件的GDI?方法:右键xxxlib文件的第一节点添加方法;完成后在xxxCtrl.cpp文件会添加该函数,例如:void Cocx004Ctrl::myfun1(DOUBLE parag){AFX_MANAGE_STATE(AfxGetStaticModuleState());if(parag>250){parag=0;}CDC*dc=GetDC();CRect rec;GetClientRect(&rec);CBrush bru;CPen pen;pen.CreatePen(PS_SOLID,4,RGB(100,parag,100));dc->SelectObject(&pen);bru.CreateSolidBrush(RGB(parag,100,100));dc->SelectObject(&bru);dc->MoveTo(rec.left,rec.top);dc->LineTo(rec.right,rec.bottom);dc->Ellipse(&rec);ReleaseDC(dc);//TODO:在此添加调度处理程序代码}以上代码实现了控件的简单绘图注:默认属性中除颜色属性外还有字体等属性,这儿未整理。
vbocx全过程
1,创建OCX:你要创建一个可用的OCX控件,并在本机测试通过。
2,打包CAB:WinCAB 是一种可视化的全新的CAB压缩包制作软件,它具有采用图形界面、支持分卷压缩、可制作具有自解包功能的CAB压缩包(*.EXE文件格式)等优秀功能,这就从根本上解决了CAB压缩包的制作问题。
需要注意的是在运行WinCAB.exe时,必须确保makecab.exe文件也在相同的目录下。
注:WinCAB在网上有很多下载,可以去百度搜,makecab.exe在系统盘windows\system32下。
一般来说,一个单独的OCX不需要INF也可以打成CAB发布,所以这里就不介绍INF文件了,想了解的话,去我文章下边的几个链接。
3,数字签名:做为测试,也可以不要数字签名。
只需要在客户端PC的IE安全选项中,把级别调低或针对ACTIVEX设置调成enable。
关于证书和签名 -|zuiwanting 发表于 2006-5-24 9:58:00\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin下有关于证书和签名相关工具1。
Makecert.exe ---证书创建工具2。
Cert2Spc.exe ---发行者证书测试工具3。
Signcode.exe ---文件签名工具建立自己的根证书:makecert -sk myPK -ss myName -n "CN=LUO31工作室" -r c:\luo31.cersk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置;如果你需要导出私钥文件,请不要使用sk,而换作s,eg:makecert -ss myName -n "CN=LUO31工作室" -sv c:\luo31.pvk -r c:\luo31.cer建立自根证书授权的子证书:makecert -sk "myPK" -is myName -n "CN=luo31" -$ commercial -icc:\luo31.cer c:\31.cersk-表示主题的密钥容器位置,is-颁发者的证书存储名称, n-证书颁发对象,ic-颁发者的证书存储位置,-$-授权范围(用于代码签名);使用Cert2Spc生成spc发行者证书(可选):cert2spc c:\31.cer c:\31.spc使用signcode为你的程序,库或cab包签名:双击signcode,或在控制台键入signcode,不带参数会启动签名向导。
从ocx控件编写到发布到网上全过程
VC6.0从开发activex ocx控件到发布到网上全过程(sunxiaopeng)ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。
控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。
一:vc创建activex控件创建一个activex控件,名称为:test.ocx,创建步骤略。
显示结果如下:为该控件增加一个方法void GetStr(LPCTSTR str),该方法内部代码如下:这样,GetStr方法就被加入了。
onDraw函数下代码如下下面,测试该方法,鼠标右键控件,选择Invoke Methods,弹出如下对话框:在parameter中输入hello,单击Invoke按钮,显示如下:那么如何在网页中将参数传递给控件,让其在网页中显示出来呢??稍后介绍把test.ocx控件放入c:\ceshi目录下,到网上下载Makecert.exe,Cert2Spc.exe,Signcode.exe,并一同放入c:\ceshi目录下二:ActiveX打包与发布1)用到的工具如下所示:1.Makecert.exe ---证书创建工具2.Cert2Spc.exe ---发行者证书测试工具3.Signcode.exe ---文件签名工具2)ActiveX发布步骤打包activeX需要制作证书,具体用到makecert 、cert2spc 、signtool这三个工具,另外需要:digsig.dll和signer.dll。
现在我们将以上工具和.ocx控件放到同一个目录c:\test下.(1)单击"开始"-->"运行(R)"-->输入"cmd"-->回车-->进入到操作的控件所在的目录(需要将上面所说的工具,和ocx控件放到一个文件夹下);(2)创建inf文件,代码如下[version]signature="$CHICAGO$"AdvancedINF=2.0[Add.Code]test.ocx=test.ocx[test.ocx]file-win32-x86=thiscabRegisterServer=yesclsid={B649E664-D7CF-4481-A58E-AC8B4440794A}DestDir=11FileVersion=1,0,0,1上述代码解释如下:file-win32-x86=thiscab//告诉ie到哪里去得到这个dll,file一共包括三个部分,第一部分是file,这个永远都是这样的(至少目前来说);第二部分告诉声明支持的OS,win32表示windows,mac 就是苹果MAC OX了;第三部分是CPU类型,比如说x86、 ppc (Power PC)、 mips 或者alpha了。
VC6创建ocx工程的步骤
1、新建工程。
选择MFC Activex ControlWizard。
默认点击完成。
2、按Ctrl+W,出现建立向导,点击automation选项卡,点击Add Method。
添加函数3、输入函数名,函数返回值,函数参数。
即完成函数添加。
4、在工程cpp类中,加入以下代码,确保页面调用能正常#include "comcat.h"//页面安全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}};////////////////////////////////////////////////////////////////////////////// CV oiceApp::InitInstance - DLL initialization// 创建组件种类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.CA TEGORYINFO 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;}// 注册组件种类HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CA TID 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;}// 卸载组件种类HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CA TID catid){ICatRegister* pcr = NULL ;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (SUCCEEDED(hr)){// Unregister this category as being implemented by the class.CATID rgcatid[1] ;rgcatid[0] = catid;hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);}if (pcr != NULL)pcr->Release();return hr;}5.在cpp类中修改下面这两个函数:STDAPI DllRegisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))return ResultFromScode(SELFREG_E_CLASS);// 标记控件初始化安全.// 创建初始化安全组件种类hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");if (FAILED(hr))return hr;// 注册初始化安全hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 标记控件脚本安全// 创建脚本安全组件种类hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");if (FAILED(hr))return hr;// 注册脚本安全组件种类hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}/////////////////////////////////////////////////////////////////////////////// DllUnregisterServer - Removes entries from the system registrySTDAPI DllUnregisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))return ResultFromScode(SELFREG_E_CLASS);// 删除控件初始化安全入口.hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 删除控件脚本安全入口hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}6. 在ctrl.cpp类中加入如下代码(IMPLEMENT_OLECTLTYPE(CNetV oiceCtrl, IDS_NETVOICE, _dwNetV oiceOleMisc) 后面加入)////////////------------------------------------------------BEGIN_INTERFACE_MAP( CNetV oiceCtrl, COleControl )INTERFACE_PART(CNetV oiceCtrl, IID_IObjectSafety, ObjSafe)END_INTERFACE_MAP()//.............................................................................// IObjectSafety member functions// Delegate AddRef, Release, QueryInterfaceULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::AddRef(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalAddRef();}ULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::Release(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalRelease();}HRESULT FAR EXPORT CNetV oiceCtrl::XObjSafe::QueryInterface( REFIID iid, void FAR* FAR* ppvObj){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj); }const DWORD dwSupportedBits =INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;const DWORD dwNotSupportedBits = ~dwSupportedBits;//.............................................................................// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions// Allows container to query what interfaces are safe for what. We're// optimizing significantly by ignoring which interface the caller is// asking for.HRESULT STDMETHODCALLTYPECNetV oiceCtrl::XObjSafe::GetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions) {METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)HRESULT retval = ResultFromScode(S_OK);// does interface exist?IUnknown FAR* punkInterface;retval = pThis->ExternalQueryInterface(&riid,(void * *)&punkInterface);if (retval != E_NOINTERFACE) { // interface exists punkInterface->Release(); // release it--just checking!}// we support both kinds of safety and have always both set,// regardless of interface*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;return retval; // E_NOINTERFACE if QI failed}/////////////////////////////////////////////////////////////////////////////// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions// Since we're always safe, this is a no-brainer--but we do check to make // sure the interface requested exists and that the options we're asked to // set exist and are set on (we don't support unsafe mode).HRESULT STDMETHODCALLTYPECNetVoiceCtrl::XObjSafe::SetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)// does interface exist?IUnknown FAR* punkInterface;pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);if (punkInterface) { // interface existspunkInterface->Release(); // release it--just checking!}else { // interface doesn't existreturn ResultFromScode(E_NOINTERFACE);}// can't set bits we don't supportif (dwOptionSetMask & dwNotSupportedBits) {return ResultFromScode(E_FAIL);}// can't set bits we do support to zerodwEnabledOptions &= dwSupportedBits;// (we already know there are no extra bits in mask )if ((dwOptionSetMask & dwEnabledOptions) !=dwOptionSetMask) {return ResultFromScode(E_FAIL);}// don't need to change anything since we're always safereturn ResultFromScode(S_OK);}7. 在ctrl.h中加入以下代码:#include <objsafe.h>DECLARE_INTERFACE_MAP()BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions);STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions);END_INTERFACE_PART(ObjSafe);8.页面代码中,添加如下代码:<objectid="NetV oice"codebase="NetV oice.ocx"classid="clsid:439A1200-A72F-48A5-970D-64EFD9192613"></object>。
vb开发ocx实例
vb开发ocx实例摘要:一、VB开发OCX控件背景1.VB与OCX控件的关系2.VB开发OCX控件的优势二、VB开发OCX控件步骤1.创建一个新的VB项目2.编写OCX控件代码3.创建OCX控件的属性4.创建OCX控件的方法5.编译和注册OCX控件三、VB开发OCX控件实例1.一个简单的计算器OCX控件2.实现计算器功能的方法3.将计算器OCX控件嵌入到其他应用程序中四、VB开发OCX控件的注意事项1.兼容性问题2.安全问题3.优化OCX控件性能正文:VB开发OCX实例一、VB开发OCX控件背景作为一款功能强大的编程语言,VB(Visual Basic)广泛应用于各种开发场景。
OCX(OLE Control eXtension)控件是一种可重用的组件,可以在不同的应用程序之间共享。
通过VB开发OCX控件,可以充分利用VB的优势,实现更加灵活和高效的应用程序开发。
二、VB开发OCX控件步骤1.创建一个新的VB项目首先,打开Visual Basic开发环境,新建一个标准VB项目。
在“项目”菜单中,选择“添加”→“类模块”,新建一个名为“MyOCX”的类模块。
2.编写OCX控件代码在“MyOCX”类模块中,编写控件的属性和方法。
例如,我们可以创建一个简单的计算器OCX控件,包括两个文本框(用于输入和显示结果)和四个按钮(用于执行加、减、乘、除操作)。
```vbPrivate m_strInput As StringPrivate m_strResult As StringPublic Property Input() As StringGetReturn m_strInputEnd GetSetm_strInput = ValueEnd SetEnd PropertyPublic Property Result() As StringGetReturn m_strResultEnd GetSetm_strResult = ValueEnd SetEnd PropertyPublic Sub Calculate()Dim strExpression As StringDim objParser As New ParserstrExpression = Input & " " & Me.Controls("btn" & Eval("btn" & Me.Controls.Count - 1).Name).Captionm_strResult = objParser.Evaluate(strExpression)End Sub```3.创建OCX控件的属性在“MyOCX”类模块的代码窗口中,按F4键创建Input和Result属性。
C#生成ocx控件
用C#编写ActiveX控件(一)前些日子做一个Web项目,必须自己编写一个ActiveX控件。
如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX 控件。
首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图:UserControl1.cs内容如下:using System;using System.Collections;using ponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;namespace HelloWorld{///<summary>/// UserControl1 的摘要说明。
///</summary>public class Demo : erControl{private bel label1;///<summary>///必需的设计器变量。
///</summary>private ponentModel.Container components = null;public Demo(){// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();// TODO: 在 InitComponent 调用后添加任何初始化}///<summary>///清理所有正在使用的资源。
///</summary>protected override void Dispose( bool disposing ){if( disposing ){if( components != null )components.Dispose();}base.Dispose( disposing );}组件设计器生成的代码}}此时编译项目,可以生成HelloWorld.dll。
Delphi编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)
Delphi编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)⼀、ActiveX应⽤情况简介:ActiveX控件也就是⼀般所说的OCX控件,它是 ActiveX技术的⼀部分。
ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32位应⽤编程接⼝(Win32 API)和组件对象模型的⼀系列扩充和增强,⽬标是把计算机桌⾯环境与因特⽹环境集成起来,同时保护在Windows技术中现有的开发投资。
微软的 ActiveX技术根本上就是修改过的OCX技术,使它能够跨越Internet,主要是使⽤WWW来传递控件。
ActiveX控件可以被集成到很多⽀持ActiveX的应⽤当中去,或者直接⽤来扩展应⽤的功能,这些⽀持ActiveX的应⽤包括C++ Builder、Delphi、Visual dBASE、 Visual Basic、Visual C++、Internet Explorer、Netscape Navigator等。
ActiveX控件还可以使⽤在因特⽹上,在⽹页上使⽤它来发布信息、处理与⽤户的交互,但是需要使⽤⽀持ActiveX的浏览器才能阅读这些⽹页。
⽬前已经开发出来的ActiveX控件越来越多,由于ActiveX控件具有很好的特性,我们可以在编程的时候选择使⽤合适的控件来加快⾃⼰的应⽤开发。
可以不夸张地说,ActiveX控件是Windows平台编程必不可少的法宝。
使⽤ActiveX控件是相对⽐较简单的。
但是,开发ActiveX控件并不是⼀件简单的事情,必须要熟悉⽽不只是了解ActiveX技术才能开发出好的ActiveX控件。
⽽COM、OLE等ActiveX技术对于⼀般的程序员来说,是⽐较复杂难懂的。
所以,ActiveX控件的开发者⼀般都是“⽼鸟”级别的程序员。
但是如果您有了Inprise公司的Borland Delphi,那⼜另当别论了。
Delphi作为Windows平台上最优秀的程序开发⼯具之⼀,为ActiveX控件的开发提供了强有⼒的⽀持,让您轻松地开发ActiveX控件。
vb 最简单OCX制作教程图解
第一部当然是先新建工程创建后截图在Active窗口中创建一个line控件给本Active建立一个属性输入代码Public Property Get Drive() As StringDrive = Line1.BorderWidth '如果只写此代码那属性只是只读型号创建一个Drive属性,属性是Line1的线宽End PropertyPublic Property Let Drive(ByVal New_Drive As String)Line1.BorderWidth = New_Drive '这里是赋值属性New_Drive 赋值给Line1.BorderWidthEnd Property现在可以生成OCX了保存到桌面,不要改名了等下好用 --- 怎么用自己做的控件呢先创建新的标准EXE工程这就是你自己做的控件了长的丑了点添加进去由于没改名,点击你创建的控件进去后UserControl11就是你创建的控件了还记得你自己创建的属性吗(Drive) 现在你就把他当成我们使用过的属性来用UserControl11.Drive = 50 就能赋值让line线宽变为50了还记得自己的代码吗Public Property Get Drive() As StringDrive = Line1.BorderWidth '如果只写此代码那属性只是只读型号创建一个Drive属性,属性是Line1的线宽End PropertyPublic Property Let Drive(ByVal New_Drive As String)Line1.BorderWidth = New_Drive '这里是赋值属性New_Drive 赋值给Line1.BorderWidthEnd Property如果只写下面这段的话那就只能是一个被读取的属性Public Property Get Drive() As String'一定切记这一段里面的Drive才是属性名称后面的代码全以这个为中小心的Drive = Line1.BorderWidth '如果只写此代码那属性只是只读型号创建一个Drive属性,属性是Line1的线宽End Property用的时候也最多就是msgbox 一下line的线宽加上下面的就能赋值了也就可以让line线宽变了。
vb开发ocx实例 -回复
vb开发ocx实例-回复VB开发OCX实例在本文中,我们将讨论如何使用Visual Basic(VB)开发一个OCX (Object Linking and Embedding Custom Control)控件的实例。
OCX是一种自定义控件,可以在其他应用程序中嵌入和使用。
我们将按照以下步骤进行开发:1. 理解OCX控件OCX控件是一种可重用的二进制文件,它包含了控件的代码和属性。
它可以在多个应用程序中使用并具有独立于宿主应用程序的用户界面。
开发OCX控件的好处之一是可以将其添加到多个应用程序中,从而提高代码重用性和开发效率。
2. 打开Visual Basic环境首先,我们需要打开Visual Basic开发环境。
在环境中,我们可以创建新的项目并开始开发我们的OCX控件。
3. 创建新项目在Visual Basic中,选择“File”菜单,然后选择“New Project”选项。
选择“ActiveX Control”模板,并为项目命名。
4. 设计用户界面在VB的设计视图中,我们可以使用控件工具箱中的各种控件来设计OCX控件的用户界面。
您可以根据自己的需求添加按钮、文本框、标签等控件,并调整其位置和大小。
5. 添加属性在OCX控件中,我们可以定义自定义属性,从而允许其他应用程序更改和访问这些属性。
在属性窗口中,我们可以为控件定义属性的名称、类型和默认值。
通过设置属性的访问级别,我们还可以控制属性是否可以从外部应用程序中访问或更改。
6. 实现控件逻辑通过VB的事件处理程序,我们可以为OCX控件添加所需的功能和逻辑。
例如,当用户单击按钮时,我们可以处理该按钮的点击事件,并执行相应的代码。
7. 调试和测试在开发过程中,我们应该使用适当的调试技术来验证代码的正确性。
通过使用断点、输出语句和调试工具,我们可以跟踪代码的执行流程并解决可能存在的问题。
8. 编译和注册OCX控件完成OCX控件的开发后,我们需要将其编译为一个二进制文件,并注册到Windows操作系统中。
vb开发ocx实例 -回复
vb开发ocx实例-回复VB开发OCX实例前言VB是一种非常受欢迎的开发语言,而OCX是一种能够在Windows环境下被复用的组件对象模型(COM)控件。
本文将介绍如何使用VB来开发一个OCX控件实例。
首先,让我们先了解一下VB开发和OCX控件的概念。
第一步:VB开发概述VB(Visual Basic)是一种基于事件驱动的编程语言,其简洁易懂的语法和IDE(集成开发环境)使得开发人员能够快速构建各种应用程序。
VB 可以用于开发桌面应用程序、Web应用程序和数据库应用程序等。
第二步:OCX控件概述OCX控件是COM(组件对象模型)组件的一种形式,它允许开发人员将可复用的功能封装为独立的控件,以便在不同的应用程序中重复使用。
OCX控件可以在VB、C++、C#等编程语言中调用和使用。
第三步:创建VB项目首先,我们需要创建一个VB项目,以便开始开发OCX控件。
打开VB开发环境,点击“新建项目”,选择Windows桌面应用程序。
给项目命名并选择保存位置后,点击“确定”来创建项目。
第四步:添加OCX控件在VB项目中,我们可以通过添加OCX控件来扩展应用程序的功能。
点击“项目”->“添加引用”来添加OCX控件。
在弹出的对话框中,选择“浏览”按钮并找到OCX控件的文件路径,然后点击“确定”将其添加到项目中。
第五步:设计界面在VB中,我们可以使用拖拽的方式来设计界面。
通过工具箱中的控件,将所需的控件拖拽到窗体中,并根据需要设置其属性。
可以通过双击控件来编写相应的事件处理程序。
第六步:编写代码逻辑在VB项目中,我们可以使用VB语言来编写代码逻辑。
可以通过双击按钮等控件来编写事件处理程序,在其中调用OCX控件提供的方法和属性。
可以使用VB的面向对象特性来操作OCX控件。
第七步:调试和运行在完成代码编写后,我们可以通过调试来检查应用程序的运行情况。
单击“调试”->“开始调试”来启动调试模式,在其中可以逐步跟踪代码并查看变量的值。
ocx控件制作步骤
ocx控件制作步骤制作activex控件(ocx)步骤1.安装IDE(.NET)2.第一步3.第二步4.第三步双击解决方案中的backup3Ctrl5.第四步制作按钮控件需要编辑的事件属性中得到按钮按下事件,编辑代码void Cbackup3Ctrl::OnLButtonDown(UINT nFlags, CPoint point) {if( MessageBox("确定要开始帐前备份吗?", "确定",MB_YESNO|MB_DEFBUTTON2)==IDYES)WinExec("c:\\中心日终\\backup_before.bat", SW_SHOW); elsereturn;COleControl::OnLButtonDown(nFlags, point);}6.第五步在代码中找OnDraw方法:填写代码// Cbackup3Ctrl::OnDraw - 绘图函数void Cbackup3Ctrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { DoSuperclassPaint(pdc, rcBounds);CSize Extent = pdc->GetT extExtent("备份中");CPoint pt( rcBounds.CenterPoint().x - Extent.cx/2, rcBounds.CenterPoint().y - Extent.cy/2 );int nMode = pdc->SetBkMode(TRANSPARENT);pdc->TextOut(pt.x, pt.y, "备份中");}7.第六步生成解决方案在D:\net\backup3\Debug下会生成一个backup3.ocx控件,在系统中注册就可以使用C:\WINDOWS\system32\regsvr32.exeD:\net\backup3\Debug\backup1.ocx 注:如果用IDE进行编译的话,会自动注册到系统注册表中,无需在进行手动注册,如果投放生产的时候,需要手动注册。
VB_OCX制作
图14-6 ActiveX 控件的属性
采用类似的方法可以将UserControl对象子控件Dir1的Path属性和子 控件File1的FileName属性显露出来。参见图14-6(已将Path的默认 值设置为“c:\效果图”)。
7.保存属性值
在UserControl对象中有三个与属性访问密切相关的事件:InitProperties事件、 ReadProperties事件和WriteProperties事件。 属性保存在称为“属性包”、类型为PropertyBag的对象中,可以通过调用“属性包”的 WriteProperties方法和ReadProperties方法来保存和读取属性值。 如读取Drive、Path、FileName属性的过程代码为: Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
当加载具有保存状态的对象的旧实例时,发生该事件
当保存对象的实例时,发生该事件。该事件通知对象此时需要保存对 象的状态,以便将来可恢复该状态。大多数情况下,对象的状态仅包 括属性值
当焦点进入控件时,发生该事件
当焦点离开控件时,发生该事件
2.设计ActiveX 控件界面 按图14-2设计界面,即添加四个控件:驱动器列表框Drive1、目录 列表框Dir1、文件列表框File1和图片框Picture1,将UserControl1对象 的Name属性设置为ACDSee,以后在其他窗体上添加该控件时,控 件的默认名称将以ACDSee开头。如需要可以为UserControl1对象的 ToolboxBitmap属性任意指定一个图形文件。
File1.Path = Dir1.Path ' 文件列表框的路径改变 End Sub Private Sub Combo1_Click()
OCX开发方法
打开SSClient里的vc工程
1、选择”view”->”class view”
2、在”SSCLIENTLib->IHisuInt”里右键add method
函数类型:HRESULT
输入参数类型:BSTR
输出参数类型:BSTR *
(一般只有一个输出参数,web里调用时输出参数作为函数的返回值)
例如:HRESULT F_UKEY_Sign([in] BSTR data, [out,retval] BSTR* sign);
3、增加方法后,会自动生成方法的函数代码,在HisuSSC.cpp文件里。
4、在函数代码里实现代码功能即可。
5、修改控件版本,打开SSClient.rc资源文件,打开里面的version,修改版本号。
建议版本号规则:1.0.315.0,1.0为大版本号,315为日期,0为小版本号
该版本号在制作cab安装包及页面调用时需指定
制作CAB安装包
1、打开“制作CAB”文件夹
2、可参考里面的例子
3、修改inf文件,添加需要打包的dll和ocx文件,注意版本号和classid
(classid和版本号用于指定ocx控件,更新ocx只需更新版本号,ie会根据版本号安装新控件,可以不修改classid,classid在ocx程序中定义:
[
uuid(574CEDC6-662C-4ecc-B5C6-04C8B3D50E49),
helpstring("HisuInt Class")
]
)
4、修改bat文件,定义需要打包的文件即可
测试ocx控件
参考“测试程序”里的页面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
制作activex控件(ocx)步骤1.安装IDE(.NET)
2.第一步
3.第二步
4.第三步
双击解决方案中的backup3Ctrl
5.第四步
制作按钮控件需要编辑的事件
属性中
得到按钮按下事件,编辑代码
void Cbackup3Ctrl::OnLButtonDown(UINT nFlags, CPoint point) {
if( MessageBox("确定要开始帐前备份吗?", "确定
",MB_YESNO|MB_DEFBUTTON2)==IDYES)
WinExec("c:\\中心日终\\backup_before.bat", SW_SHOW);
else
return;
COleControl::OnLButtonDown(nFlags, point);
}
6.第五步
在代码中找OnDraw方法:填写代码
// Cbackup3Ctrl::OnDraw - 绘图函数
void Cbackup3Ctrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {
DoSuperclassPaint(pdc, rcBounds);
CSize Extent = pdc->GetTextExtent("备份中");
CPoint pt( rcBounds.CenterPoint().x - Extent.cx/2,
rcBounds.CenterPoint().y - Extent.cy/2 );
int nMode = pdc->SetBkMode(TRANSPARENT);
pdc->TextOut(pt.x, pt.y, "备份中");
}
7.第六步
生成解决方案
在D:\net\backup3\Debug下会生成一个backup3.ocx控件,在系统中注册就可以使用
C:\WINDOWS\system32\regsvr32.exe D:\net\backup3\Debug\backup1.ocx 注:如果用IDE进行编译的话,会自动注册到系统注册表中,无需在进行手动注册,如果投放生产的时候,需要手动注册。
语法如上
8.第七步
可以进行手动测试
完成
9.第八步
在程序中进行运用
在【工具箱】中,【组件】选项卡中,右键【添加/移除项】
COM组件:添加自己写的控件:backup3
左边的工具箱组件选项卡中就会出现刚添加的控件
直接托到页面上使用
以上是制作和使用的全过程。