使用C#写的第一个COM组件,并使用C#语言调用之
作者:金鸽
欢迎访问 sinodragon21.cublog.cn
在用C#创建COM组件时,一定要记住以下几点:
1:所要导出的类必须为公有;
2:所有属性、方法也必须为公有;
3:要导出的属性、方法必须用接口方式;如果没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到COM。但他们可以被别的.NET程序所使用;
4:所有的事件也必须用接口方式;
编写COM组件,生成HelloWorld.dll
// Compile: Csc.exe /out:HelloWorld.dll /target:library CHelloWorld.cs
// Author: sinodragon21
// Date: 2010/9/19
using System;
using System.Runtime.InteropServices;
namespace HelloWorld
{
[Guid("28BA1E34-9433-4014-A87E-F6D01370F635")]
public interface HelloWorldInterface
{
[DispId(1)]
void sayHello(string str);
}
[Guid("D8035EF2-EE2A-44cb-900A-5CF51E85FCE8"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface HelloWorldEvents
{
}
[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(HelloWorldEvents))]
public class CHelloWorld:HelloWorldInterface
{
public void sayHello(string str)
{
Console.WriteLine("You said: {0}", str);
}
}
}
|
使用刚刚生成的COM组件HelloWorld.dll,调用接口前,可使用ilasm.exe工具查看COM组件的内部结构,对外提供的借口等等。
// Compile: csc /r:HelloWorld.dll test.cs
// Author: sinodragon21
// Date: 2010/9/19
using System;
using HelloWorld;
namespace testHelloWorld
{
class testHelloWorld
{
static void Main(string[] args)
{
CHelloWorld hw = new CHelloWorld();
hw.sayHello("I'm Kim. How do you do?");
}
}
}
|
备注:
Guid为全局唯一标识,可以用VS2008的命令提示符中输入:guidgen 就会出来它的窗口。在几个复选框选择最后一个Registry Format,点击New Guid,然后COPY就行了(以下如有guid的字符串,全部同样操作)
[DispId(1)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)], [DispId(3)]…
阅读(1606) | 评论(0) | 转发(0) |