当前位置: 移动技术网 > IT编程>开发语言>c# > c#创建vc可调用的com组件方法分享

c#创建vc可调用的com组件方法分享

2019年07月18日  | 移动技术网IT编程  | 我要评论
开发工具:vs2008 vs2008命令提示符(呵呵,这个你应该可以找到在什么地方吧) 附:本文适用任何vs系列工具。 在用c#创建com时,一定要记住以下几点:

开发工具:vs2008

vs2008命令提示符(呵呵,这个你应该可以找到在什么地方吧)

附:本文适用任何vs系列工具。

在用c#创建com时,一定要记住以下几点:

1:所要导出的类必须为公有;

2:所有属性、方法也必须为公有;

3:要导出的属性、方法必须用接口方式;如果没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到com。但他们可以被别的.net程序所使用;

4:所有的事件也必须用接口方式;

现在我们开始正题:

一、新建一个visual c#工程(习惯这种叫法了,现在应该叫解决方案)。

选择类型“类库”;我就叫mycom吧。

二、编写导出接口。

为了大家理解方便,我仅一加法操作举例。如下:

复制代码 代码如下:

[guid("154bd6a6-5ab8-4d7d-a343-0a68ab79470b")]

    public interface mycom_interface

    {

        [dispid(1)]

        int add(int a, int b);

guid为全局唯一标识,可以用vs2008的命令提示符中输入:guidgen 就会出来它的窗口。在几个复选框选择最后一个registry format,点击new guid,然后copy就行了(以下如有guid的字符串,全部同样操作)

[dispid(1)]为函数的标识。如果有多个函数可相应的在函数前面加[dispid(2)], [dispid(3)]…

三、创建事件接口。

复制代码 代码如下:

[guid("d11fea37-ac57-4d39-9522-e49c4f9826bb"),

interfacetype(cominterfacetype.interfaceisidispatch)]

public interface mycom_events

{

}

guid同二,不多说

interfacetype表求向com公开的方式,这里选择为以调度的方式向com公开。

四、创建具体类:

复制代码 代码如下:

[guid("2e3c7bad-1051-4622-9c4c-215182c6bf58"),

classinterface(classinterfacetype.none),

comsourceinterfaces(typeof(mycom_events))]

public class class1 : mycom_interface

{

public int add(int a, int b)

{

return a + b;

}

}

至此,代码完毕。很简单吧。别急,后面来有常常被忽略的步骤,先把整体代码放在下面(注意引用interopservices):

复制代码 代码如下:

using system;

using system.runtime.interopservices;

using system.text;

 

namespace mycom

{

[guid("154bd6a6-5ab8-4d7d-a343-0a68ab79470b")]

public interface mycom_interface

{

[dispid(1)]

int add(int a, int b);

}

 

[guid("d11fea37-ac57-4d39-9522-e49c4f9826bb"),

interfacetype(cominterfacetype.interfaceisidispatch)]

public interface mycom_events

{

 

}

 

[guid("2e3c7bad-1051-4622-9c4c-215182c6bf58"),

classinterface(classinterfacetype.none),

comsourceinterfaces(typeof(mycom_events))]

public class class1 : mycom_interface

{

public int add(int a, int b)

{

return a + b;

}

}

}


五、大家都知道com是需要注册的。

注册时要加密钥文件.snk。这一部就是生成snk文件。进入vs2008命令提示符。用命令:sn –k mycom.snk回车。我的在e:\vs2008\vc下面就生成了一个(mycom.snk)的文件。(你们可以根据自己的命令提示符所在的文件目录下去找)。然后把它copy到你的工程根目录下。

六、打开assemblyinfo.cs。

在里面加入[assembly:assemblykeyfile("mycom.snk")]

七、(1)项目属性->应用程序->程序集信息->选中“使程序集com可见”。(2)项目属性->生成->选中“为com互操作注册”。

八、生成。如果在debug下有一个mycom.tlb,那你就成功了(肯定还有mycom.dll)要此tlb文件是为了在vc6.0里面测试。

九、在vc里面建一个mfc对话框程序(当然console程序也一样,我为了看着方便)。建好后,把刚刚生成的mycom.tlb拷到你的根目录下。

十、选在代码里加入#import "mycom.tlb",然后编写核心测试代码:(我是在一个button1按钮里面添加的),如下:

复制代码 代码如下:

void ctestdlg::onbutton1()
{
coinitialize(null);//注意初始化
mycom::mycom_interfaceptr p(__uuidof(mycom::class1));//创建智能指针
mycom::mycom_interface *s = p;
int a = 3;
int b = 6;
int c = s->add(a,b);
cstring str;
str.format("%d",c);
messagebox(str);
}

当弹出一个9,就说明你已经成功了。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网