读书人

请教用C#写了COM组件如何在没有VS的

发布时间: 2012-06-08 12:55:24 作者: rapoo

请问用C#写了COM组件,怎么在没有VS的机器上面注册呢?
我建立了一个 C# 类库的工程并在属性里面勾选了“注册为COM组件”,编写了如下的代码。

C# code
    [Guid("F927F24C-6A4B-463F-80EA-5082FFA1B440")]    [ComVisible(true)]    [ClassInterface(ClassInterfaceType.None)]    [ComSourceInterfaces(typeof(IZLActiveXEvent))]    public class ZLActiveX : IZLActiveX    {        public int Synchron(string path)        {            try            {                MessageBox.Show("Hit");            }                return 0;            }            catch (Exception e)            {                MessageBox.Show(e.ToString());                return -1;            }        }    }    [Guid("E7525AFD-D231-4F64-98DA-0000F55C2173")]    [ComVisible(true)]    public interface IZLActiveX    {        [DispId(0x00000002)]        int Synchron(string path);    }    [Guid("59D5AD91-7D85-48BB-8199-0F29025A7A9D")]    [ComVisible(true)]    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]    public interface IZLActiveXEvent    {    }


同时在网页上面利用下面的JS代码调用这个COM组件。
JScript code
<object name="ZLActiveX" id="ZLActiveX" classid="clsid:F927F24C-6A4B-463F-80EA-5082FFA1B440"></object><script language="javascript" type="text/javascript">    function buttonSynchron_Click()    {        ZLActiveX.Synchron("");    }</script>


当我点击下面的按钮时,调用JS来调用C#编写的COM组件。
HTML code
<input type="button" name="buttonSynchron" id="buttonSynchron" value="Synchron" onclick="buttonSynchron_Click();"/>


在主机上编写完成并编译成功了,在页面上面可以正确地运行。网页可以正确地调用COM组件。

但我把这个网页和COM组件对应的DLL文件考到另外一台没有装VS的电脑上(此电脑已经装了对应的.Net Frameworks了),用RegAsm.exe这个程序进行注册,显示注册成功了,但网页上无法调用COM组件。

显示的错误如下。
是网页中JS的这一句,找不到对应的函数或者方法。
ZLActiveX.Synchron("")

请问这如何是好,请指点。

[解决办法]
使用 regsvr32 注册
[解决办法]

string ddVueOcxFile = string.Format("{0}\\Data\\ddVue.ocx", Application.StartupPath);
if (!File.Exists(ddVueOcxFile))
{
MessageBox.Show("ddVue.ocx被非法移动!");
return false;
}
string regsvr32Para = "\"" + ddVueOcxFile + "\"";
System.Diagnostics.Process p = System.Diagnostics.Process.Start("regsvr32", regsvr32Para + " /s");

if (p != null && p.HasExited)
{
Int32 exitCode = p.ExitCode;
if (exitCode == 0)
{//注册成功
return true;
}
}
[解决办法]
Q:请问用C#写了COM组件,怎么在没有VS的机器上面注册呢?
A:装.net

[解决办法]
regsvr32好象不可以。
.net开发的com好象是一个特殊命令。好象是这个 REGSAM msdn上有详细说明。

读书人网 >C#

热点推荐