天天看點

C#.NET 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);

    }

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

    [ProgId("MyLib.MyClassa")]

    public class MyClass : IMyClass

        public void Initialize()

        {

            //nothing todo

        }

        public void Dispose()

        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

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

    o.Dispose

    Set o=Nothing

</script>

提示不能建立 ACTIVEX 控件……

原因:是因為注冊沒有注冊上……

提示找不到路徑

說明已經注冊上了。可能DLL不是強簽名的,而又沒有指定/CODEBASE屬性,導緻注冊裡沒有這個鍵值。而查找不到。

本文轉自 甯金峰 51CTO部落格,原文連結:http://blog.51cto.com/13243523/2044647,如需轉載請自行聯系原作者