用MFC创建COM组件

简介:

 摘自这篇文章(点我),稍加整理。

    一、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函数中编写代码即可。最后的函数看起像:

 
  1. BSTR HelloWorld::sayHello(LPCTSTR visitor) 
  2.     AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
  3.     CString strResult; 
  4.     strResult.Format(TEXT("你好啊,%s!"), visitor); 
  5.     MessageBox(0, strResult.GetBuffer(), TEXT("TestCom.HelloWorld.sayHello"), 0); 
  6.     return strResult.AllocSysString(); 
    如此一来,TestCom.HelloWorld就有了一个名为sayHello的函数可用了。
 
二、COM组件的调用(用C#测试)
   以下所有调用方法都需要注册控件:使用regsvr32 TestCom.dll注册组件(其实就是调用了TestCom.dll中导出的函数DllRegisterServer)。 
    假设使用的是Visual studio 2008
   在C#工程左边“解决方案管理器”中“引用”上右键“添加引用”,在对话框中选择“COM”项,找到TestCom(除非未注册控件,否则一定存在)项。调用代码如下:
 
 
  1. private void button1_Click(object sender, EventArgs e){ 
  2.     try  { 
  3.     HelloWorldClass helloObj = new HelloWorldClass(); 
  4.     helloObj.sayHello("walker"); 
  5.     }  catch
  6.     MessageBox.Show("Error!"); 
  7.     } 
    编译后,除主程序外,会生成一个Interop.TestCom.dll必须和主程序一同发布。若编译不能正常通过,尝试更改编译配置为x86。另外,在主程序的Program.cs的Main函数中,最好加一层try保护,以在控件未注册的时候程序崩溃得友好一些。
 
  1. static void Main(){ 
  2.     try { 
  3.     //Application....省略 
  4.     }catch
  5.     MessageBox.Show("请行注册控件TestCom.dll!""程序崩溃了!",  
  6.                   MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
  7.     } 
 
 
***
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1183650如需转载请自行联系原作者

RQSLT
相关文章
|
11月前
|
存储 C++
07 MFC - 用向导生成一个MFC应用程序
07 MFC - 用向导生成一个MFC应用程序
61 0
|
11月前
|
程序员 Windows
08 MFC - MFC框架中一些重要的函数
08 MFC - MFC框架中一些重要的函数
57 0
|
11月前
|
C++ Windows
09 MFC - 创建基于对话框的 MFC 应用程序框架
09 MFC - 创建基于对话框的 MFC 应用程序框架
74 0
|
5月前
|
C++
MFC创建带窗口的DLL
MFC创建带窗口的DLL
104 0
|
存储 程序员 编译器
MFC——简单示例演示及通过MFC向导创建MFC项目
MFC——简单示例演示及通过MFC向导创建MFC项目
369 0
MFC——简单示例演示及通过MFC向导创建MFC项目
|
存储 API 数据库
【MFC】MFC基础篇(1)
【MFC】MFC基础篇(1)
【MFC】MFC基础篇(1)
|
C++ 编译器 开发工具
非MFC工程中使用MFC库
目录(?)[-] 需求说明 常见问题 问题分析 参考解决方法 我的解决方案 Stdafxh的原理     需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application、MFC Application、Win32 Project等。
1409 0