摘自这篇文章(点我),稍加整理。
一、COM组件的编写(使用MFC)
假设使用的是Visual studio 2008
首先要创建一个MFC DLL工程。在工程中添加“MFC类”,在“MFC类向导”中,“基类”选择“CCmdTarget”,“自动化”选中中一定要选择“可按类型创建”,比如填入“TestCom.HelloWorld”,这样就生成了HelloWorld.cpp和HelloWorld.h(假如类名取为HelloWorld的话)。
打开IDE“视图”“类视图”,找到TextActiveX下的IHelloWorld接口,右键“添加”,可选添加方法和属性。添加方法(比如sayHello)时,需要设置“返回类型”,方法名,以及此方法的参数(假如设置了BSTR的visitor)。至于类型BSTR,BSTR*,IDISPATCH这些需要另外再去研究... 因为MFC封装的缘故,生成的HelloWord类的成员函数sayHello的参数为LPCTSTR(即在UNICODE条件编译下的const wchar_t*及多字节下的const char*)类型。最后只要在sayHello函数中编写代码即可。最后的函数看起像:
- BSTR HelloWorld::sayHello(LPCTSTR visitor)
- {
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- CString strResult;
- strResult.Format(TEXT("你好啊,%s!"), visitor);
- MessageBox(0, strResult.GetBuffer(), TEXT("TestCom.HelloWorld.sayHello"), 0);
- return strResult.AllocSysString();
- }
- private void button1_Click(object sender, EventArgs e){
- try {
- HelloWorldClass helloObj = new HelloWorldClass();
- helloObj.sayHello("walker");
- } catch{
- MessageBox.Show("Error!");
- }
- }
- static void Main(){
- try {
- //Application....省略
- }catch{
- MessageBox.Show("请行注册控件TestCom.dll!", "程序崩溃了!",
- MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
- }
- }