看了很多关于制作ActiveX的,但是说起用 VS2005制作ActiveX控件的几乎没有, 有也是用VS2003冒充的 ,经过几天的在网上查找和自己的联想,终于算是把它搞定了,原来 用VS2005制作 ActiveX控件也是非常简单的,简单的说也只有 二三步就 OK 了:
在制作之前先展示一张图片显示一下效果:(这是我用ActiveX控件制作上传本地图片的一个简单例子)
vs2005创建activex
点击submit上传后图片上传到服务器:
vs2005创建activex
好,现在来说一说如何用 VS2005制作一个 ActiveX:

第一步:打开VS2005,新建项目=>选择windows控件库,并为你的控件取一个名字(我取名ActiveX5)=>确定=>修改你的控件名称(例如:uc1)。
第二步:在菜单上选择 项目=>控件属性(例如:ActiveX5 属性)=>生成=>勾上 "为 COM  Interop 注册(P)" 复选框=>关闭。
第三步:在解决方案资源管理器中打开 文件夹Properties下面的文件 AssemblyInfo.cs,然后找到
vs2005创建activex
将其修改为:
vs2005创建activex
也就是将 ComVisible(false)  改为 Comviesible(true) ,并把
[assembly: Guid("e64f337c-c713-45c0-a6d4-50a9514b48e6")]
这一行进行注释了,当然这个 Guid 是各不一样的,在这里都要将其注释了
第四步:将上述Guid  复制贴粘到 ActiveX控件类的上方指明该类的属性,并添加
using System.Runtime.InteropServices; 引用 , 如下图所示:
vs2005创建activex
第四步:在你的控件 uc1 界面上随便画几个东西,然后=>在解决方案资源管理器中选中项目点右键=> 生成。

到这里 VS2005 制作 一个ActiveX 就算完成了,简单 吗 ? 呵呵~  包括创建项目都只有四步,当然这只有第二步和第三步才是最关键的。
然后将你的代码进行一下测试 新建一个htm 页面 写入
<object >
</object>
将这个htm放到 wwwroot 目录下测试下行不行了:)
为了更好的方便学习我特将我的实例代码贴出来供大家参考,其中包括ActiveX上传图片的方法(因为这篇主要讲的时VS2005制作ActiveX控件,所以没有详细的讲解上传图片的方法)
uc1.cs

vs2005创建activexusing System;
vs2005创建activexusing System.Collections.Generic;
vs2005创建activexusing System.ComponentModel;
vs2005创建activexusing System.Drawing;
vs2005创建activexusing System.Data;
vs2005创建activexusing System.Text;
vs2005创建activexusing System.Windows.Forms;
vs2005创建activexusing System.Runtime.InteropServices;
vs2005创建activex
vs2005创建activexnamespace ActiveX5
vs2005创建activexvs2005创建activex...{
vs2005创建activex    [Guid("e64f337c-c713-45c0-a6d4-50a9514b48e6")]
vs2005创建activex public partial class uc1 : UserControl
vs2005创建activexvs2005创建activex ...{
vs2005创建activex public uc1()
vs2005创建activexvs2005创建activex ...{
vs2005创建activex            InitializeComponent();
vs2005创建activex        }
vs2005创建activex
vs2005创建activex
vs2005创建activex private string imagePath;
vs2005创建activex private string strBase64;
vs2005创建activex
vs2005创建activex public string ImagePath
vs2005创建activexvs2005创建activex ...{
vs2005创建activexvs2005创建activex set ...{ this.imagePath = value; }
vs2005创建activexvs2005创建activex get ...{ return this.imagePath; }
vs2005创建activex        }
vs2005创建activex
vs2005创建activex public string StrBase64
vs2005创建activexvs2005创建activex ...{
vs2005创建activexvs2005创建activex get ...{ return this.strBase64; }
vs2005创建activex        }
vs2005创建activex
vs2005创建activex private void button1_Click(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex this.label2.Text = imagePath;
vs2005创建activex this.pictureBox1.ImageLocation = imagePath;
vs2005创建activex        }
vs2005创建activex
vs2005创建activex private void button2_Click(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex            Image img = Image.FromFile(imagePath);
vs2005创建activex            System.IO.MemoryStream stream = new System.IO.MemoryStream();
vs2005创建activex            img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
vs2005创建activex byte[] b = stream.GetBuffer();
vs2005创建activex string s = Convert.ToBase64String(b);
vs2005创建activex
vs2005创建activex this.richTextBox1.Text = s;
vs2005创建activex        }
vs2005创建activex
vs2005创建activex private void button3_Click(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex byte[] b = Convert.FromBase64String(this.richTextBox1.Text);
vs2005创建activex            System.IO.MemoryStream stream = new System.IO.MemoryStream(b);
vs2005创建activex            Bitmap bitmap = new Bitmap(stream);
vs2005创建activex
vs2005创建activex this.pictureBox2.Image = bitmap;
vs2005创建activex        }
vs2005创建activex
vs2005创建activex private void button4_Click(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex            strBase64 = this.richTextBox1.Text;
vs2005创建activex        }
vs2005创建activex
vs2005创建activex private void uc1_Load(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex
vs2005创建activex        }
vs2005创建activex
vs2005创建activex
vs2005创建activex    }
vs2005创建activex}

index.htm

vs2005创建activex<html>
vs2005创建activex<head>
vs2005创建activex <title>ActiveX测试</title>
vs2005创建activex
vs2005创建activexvs2005创建activex <script type="text/javascript">...
vs2005创建activex
vs2005创建activexvs2005创建activex function ChangePath() ...{
vs2005创建activex            ActiveX5.ImagePath = File1.value;
vs2005创建activex        }
vs2005创建activex
vs2005创建activexvs2005创建activex function OutInfo() ...{
vs2005创建activex            span1.innerHTML=ActiveX5.StrBase64;
vs2005创建activex
vs2005创建activex            form1.strBase64.value=ActiveX5.StrBase64;
vs2005创建activex        }
vs2005创建activex
vs2005创建activex </script>
vs2005创建activex
vs2005创建activex</head>
vs2005创建activex<body style="text-align:center; background-color: Highlight; font-size:12px;">
vs2005创建activex
vs2005创建activex <input >

showImage.aspx

vs2005创建activexvs2005创建activex<%...@ Page Language="C#" Debug="true" %>
vs2005创建activexvs2005创建activex<script runat="server">...
vs2005创建activex
vs2005创建activex    protected void Page_Load(object sender, EventArgs e)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex //方法一:
vs2005创建activex //string strBase64 = Request["strBase64"];
vs2005创建activex //byte[] bb = Convert.FromBase64String(strBase64);
vs2005创建activexvs2005创建activex /**//*在这一步可以将 bb 保存到 服务器的数据库当中去,
vs2005创建activex        但在这里我为了演示,所以将图片显示出来看一下效果*/
vs2005创建activex //Response.ContentType = "image/Jpeg";
vs2005创建activex //Response.BinaryWrite(bb);
vs2005创建activex
vs2005创建activex //方法二:
vs2005创建activex //string strBase64 = Request["strBase64"];
vs2005创建activex //byte[] bb = Convert.FromBase64String(strBase64);
vs2005创建activex ///*在这一步可以将 bb 保存到 服务器的数据库当中去,
vs2005创建activex //但在这里我为了演示,所以将图片显示出来看一下效果*/
vs2005创建activex //System.IO.MemoryStream stream = new System.IO.MemoryStream(bb);
vs2005创建activex //System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
vs2005创建activex //bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
vs2005创建activex
vs2005创建activex
vs2005创建activex
vs2005创建activex //将文件变为图片保存到服务器文件夹
vs2005创建activex
vs2005创建activex try
vs2005创建activexvs2005创建activex ...{
vs2005创建activex            string strBase64 = Request["strBase64"];
vs2005创建activex byte[] bb = Convert.FromBase64String(strBase64);
vs2005创建activex
vs2005创建activex            string filSaveAsPath = Server.MapPath("~/") + "fileName.jpg";
vs2005创建activex            System.IO.FileStream fstream = new System.IO.FileStream(filSaveAsPath, System.IO.FileMode.Create);
vs2005创建activex            fstream.Write(bb, 0, bb.Length);
vs2005创建activex            fstream.Close();
vs2005创建activex
vs2005创建activex this.Label1.Text = "文件上传成功,图片显示如下:";
vs2005创建activex this.Image1.ImageUrl = "fileName.jpg";
vs2005创建activex        }
vs2005创建activex catch (Exception ex)
vs2005创建activexvs2005创建activex ...{
vs2005创建activex this.Label1.Text = "对不起!文件上传失败";
vs2005创建activex        }
vs2005创建activex
vs2005创建activex
vs2005创建activex
vs2005创建activex
vs2005创建activex    }
vs2005创建activex</script>
vs2005创建activex
vs2005创建activex<asp:label >

coolsky007 发表于2008年7月30日星期三 9:33:17  IP:举报
我也是这样做的,这样做出来的控件在本机上运行没有问题的,但是要用在CA服务器上就行不通了,在服务器上远程安装的时候需要首先将这个dll在本机注册一下的,但是就是这个注册会失败,用命令注册一下就知道了:
======================
RegSvr32
---------------------------
已加载 myControl.dll,但没有找到 DllRegisterServer 输入点。
无法注册这个文件。
======================
这个问题是个坎儿!!!我在网上找了半天也没找到解决方法,望楼主明示!!!
多谢了!!

 

 

 

 

 

 

 

 

 

 

 

下面讲一下VS2005发布的问题:

1、数字签名。

使用SignCode.exe进行数字签名,步骤如下:
首先要有工具包,包括以下几个软件:(C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin目录下都有)
makecert.exe  制作cer格式的证书,即X.509证书,同时可以创建私钥
cert2spc.exe  将cer格式证书转换成spc格式证书,即PKCS #7证书
signcode.exe  将证书签署到.dll、.ocx上去
chktrust.exe  检查签署证书后的.dll、.ocx是否正确
还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来,
网上有很多文章写到这个证书,但是在VC的安装盘中却找不到。其实,没
有也没关系的。这几个软件可以从VC的安装盘中找到。

下面是具体的步骤:
1、创建一个自己的证书文件:
makecert /sv "Record.PVK" /n "CN=Chart" Chart.cer
这里,Record.PVK 表示新创建的私人密钥保存文件名
      DreamCaptial 是你想显示的公司名
      Chart.cer 是你创建最后的证书文件名
这些根据你自己的要求填写,最后得到Record.PVK和Chart.cer两个文件。
其中,运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要出错。

2、转换cer格式为spc格式(可以省略)
cert2spc Chart.cer AxChart.spc
得到AxChart.spc文件。

3、给.dll、.ocx进行签名
运行signcode,命令行方式没有试验过,我是通过界面实现的。
signcode运行后会出现数字签名向导,首先选择你要签名的.dll、.ocx,
下一步后会出现签名选项有两种,一种是典型,一种是自定义。选择自定义,
这样才能从文件选择证书,选择前面制作的AxChart.spc,再下一步是
选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散
列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,
填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,
再下一步是加盖时间戳,如果需要,用以下地址:
http://timestamp.verisign.com/scripts/timstamp.dll
要求已经上网并能出国,然后直接下一步就完成了。

4、用chktrust检查是否正确
chktrust -v WebChart.dll

就这样,得到了一个测试证书,恩,虽然只是一个测试证书,但至
少保证这个.dll、.ocx在IE浏览的时候能够弹出来一个窗口,问你是否安装,
而不是直接禁止了。

相关文章: