C# OCX控件之开发

摘要:
在C#中,没有OCX控件。相反,它只是一个COM组件。编译后,它也是一个DLL,而不是一个。ocx因此,在C#中,在创建项目时只能创建类库项目。(省略)要使组件成为可由web脚本调用的OCX控件,在开发过程中应注意以下几点:1.必须为将发布OCX控件的主类设置GUID代码。通常,RegSvr32.exe用于手动注册OCX。但是,建议使用RrgAsm注册用C#编写的COM组件。exe工具,随附。NET,并且所使用的注册工具的版本必须随开发框架的版本一起发布。

在C#中,其实没有OCX控件一说,相对应的只是COM组件,编译后也是.DLL,而不是.ocx.所以在C#中,在创建项目时只能创建类库项目。 然后就是具体的代码开发。(略) 要使组件成为能被网页脚本调用的OCX控件,在开发时,要注意以下几点: 1、必须要为将发布OCX控件的主类设置GUID码。该码在创建类库时,C#会自动生成一个(你可以使用,也可以重新生成),并存储在AssemblyInfo.cs中。设置GUID的代码参照以下:

2、必须要实现IObjectSafety接口。该接口需要手工创建一个接口类并让OCX组件实现。 
完整的接口代码:(以下接口代码都是固定的,最好不要做其他改动) 

3、对AssemblyInfo.cs进行编辑,修改相应的属性。包括以下属性及值: 
    // 则将该类型上的 ComVisible 属性设置为 true。 
    [assembly: ComVisible(true)] //将false更改为true,自动生成的注释也做了说明 
    //新添加下面的属性。该属性要求引用System.Security 
    [assembly: AllowPartiallyTrustedCallers()] 
   // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 
   //[assembly: Guid("80c07fca-841c-43c9-bd34-e9f3a6e87a85")]  //注释掉该属性,此属性必须注释,最初我没有注释此属性,生成COM组件老是不成功,有警告,会影响最后的发布.试了N次才试出原因是没有注释此属性。 
    要引用:using System.Runtime.InteropServices; 
4、编辑工程属性。 
   A、在[应用程序]页,输出类型必须指定为“类库”. 
   B、在[生成]页,必须勾选“为Com Interop注册”选项。 
作了以上修改,如果能编译成功,则表示你的COM组件已够在你本机发布成功了。也说明你的组件本身没什么问题了。

你可以写一个测试网页对你的COM组件进行引用了。 
如果是IIS,可以直接使用DLL引用方式进行引用,格式: 
<object ></object> 
也可以使用clsid方式引用。 
如果非IIS应用服务器,如tomcat等,则只能使用CLSID方式。格式: 
<OBJECT CLASSID="CLSID:8d7d8518-ca58-4863-b94d-3c616fda7b35"></OBJECT> 
"8d7d8518-ca58-4863-b94d-3c616fda7b35"就是最开始提到的那个GUID码! 
在本机上运行此网页应该不会出现问题了,因为在开发组件的过程中VS.NET会自动进行组件注册。 
使用OLE查看器可以查看当前组件是否成功注册到本机,如果没有找到该组件,应该使用手工注册方式进行注册。 
通常情况下手工注册OCX都是采用RegSvr32.exe,但注册C#编写的COM组件推荐使用.NET自带的注册工具RrgAsm.exe工具,而且使用的注册工具版本一定要与开发框架版本一起发布的版本。 

免责声明:文章转载自《C# OCX控件之开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python队列QueueH264 NALU 使用PS封装 RTP发送下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java中子类继承父类程序执行顺序问题

Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。 publicclassFatherTest { privateString name; FatherTest(){ System.out.println("--父类的无参...

C#定时器的用法

关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类里   3.定义在System.Timers.Timer类里  System.Windows.Forms.Timer是应用于WinForm中的,他是通过Windows消息机制实现的,类...

jmeter随笔(2)--post接口参数化问题

今天试着做了一下post接口测试,并对其输入的参数进行参数化设置,在这里总结一下测试的过程中遇到的问题,以及解决方式: 一、使用body data设置参数: 1,首先,使用Fiddler录制post请求,并发送成功,导成jmx格式,并用jmeter打开; 2,此时,不设置参数,运行,OK,运行成功,其传递的值为以下格式: {"tagid":"aaaaa",...

【php5权威编程-1】

 public/private/protected 访问修饰符,针对对象中的方法和属性。 <?php class MyClass { private $id = 18; public function getId() { return $this->id; } } $obj = new My...

LabView调用C#混合模式dll

在一些特定要求下,我们的C#可能需要制作dll给LabView进行调用,并且我们不能够保证C#的程序是完全自己写而不调用第三方的dll库。很多时候我们需要使用诸如Sqlite.Net、AForge.Net之类的开源库,此时我们发现我们需要使用混合模式去兼容这些由.NET 2.0版本运行时开发的开源库。 一、C#中的混合模式 如果是C#应用程序,那么我们只要...

AWT初步— 事件处理模型

之前学习的内容只能形成一个用户界面,而用户不能对其有实际的操作,也就是说用户界面没有任何功能。要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象: Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。  Event Source-事件源,事...