欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#.NET com组件的编写

程序员文章站 2022-05-01 18:39:01
C#.NET com组件的编写 设置工程属性:“生成”-> “为COM Interop注册”。 1 更改AssemblyI...
C#.NET com组件的编写

设置工程属性:“生成”-> “为COM Interop注册”。 1

更改AssemblyInfo.cs……设置COM可见 1

建立源码 1

注册COM组件DLL 3

使用HTML中VBS脚本测试 3

提示不能创建 ACTIVEX 控件…… 4

提示找不到路径 4

----作者Attilax , 1466519819@qq.com---   

我的环境 是VS2010...WIN7系统

 设置工程属性:“生成”-> “为COM Interop注册”。

当然也可以为每个接口设置COM可见性,ComVisibleAttribute类提供了这样的控制。

更改AssemblyInfo.cs……设置COM可见

// 将? ComVisible 设Θ?置?为a false 使?此?程ì序ò集ˉ中D的?类え?型í

// 对? COM 组哩?件t不?可é见?。£如?果?需è要癮从洙?COM 访?问ê此?程ì序ò集ˉ中D的?类え?型í,?

// 则ò将?该?类え?型í上?的? ComVisible 特?性?设Θ?置?为a true。£

[assembly: ComVisible(true)]

建立源码

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace MyLib

{

    [ComVisible(true)]

    [Guid("2CBD3D76-35F1-4f9d-9C1B-9DBFEE412F77")]

    public interface IMyClass

    {

        void Initialize();

        void Dispose();

        String VC(String path);

    }

    [ComVisible(true)]

    [Guid("EA2F140A-108F-47ae-BBD5-83EEE646CC0e")]

    [ProgId("MyLib.MyClassa")]

    public class MyClass : IMyClass

    {

        public void Initialize()

        {

            //nothing todo

        }

        public void Dispose()

        {

            //nothing todo

        }

        public String VC(String path)

        {

           //  x + y;

            if (path.Trim().Equals(""))

            {

                return "no pathx";

            }

            fastvcAtiLib.fastvcyjmC2k c = new fastvcAtiLib.fastvcyjmC2k();

            //   c.novc = true;   //4 test .only show pic .not show vercode text

            // c.oriImg = true;   //img not process and get vercode... cant echo show img pic ..

            c.vg = 1;

            c.sid = "c2n";

          

            string VerifyCode;

            try

            {

                VerifyCode = c.RecByte(path);

            }

            catch (Exception ex)

            {

                VerifyCode = ex.Message;

            }

            return VerifyCode;

        }

    }

}

注册COM组件DLL

  regasm   ClassLibrary1.dll /codebase

如果你的DLL不 是强签名的,则必须要使用/codebase参数

反注册使用

  regasm  /u ClassLibrary1.dll

使用HTML中VBS脚本测试 

<script language="VBScript">

Dim o : Set o=CreateObject("MyLib.MyClass")  

  o.Initialize  www.2cto.com

    MsgBox "1 + 2 = " & o.vc("c:\dx.jpg")

    o.Dispose

    Set o=Nothing

</script>

提示不能创建 ACTIVEX 控件……

原因:是因为注册没有注册上……

提示找不到路径

说明已经注册上了。可能DLL不是强签名的,而又没有指定/CODEBASE属性,导致注册里没有这个键值。而查找 不到。