C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试

简介:

 一、前言
1、本回讲解的是在 VS 2008 下的使用ATL. 并使用Win 32 Console Application进行测试以及C#项目进行测试(调用COM).

    2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFunTest,它有一个简单的函数: Sum()完成两个数值的加法

  3、ATL的介绍

      ATL本来被设计成一种书写快捷的小的COM组件。

    ATL特性:(1)C++能完成的所有功能。

                     (2)没有外部程序库,除非你想要使用它。

                     (3) 一种抽象对象和接口的相对高级的方式。

        (4)类集合的自动处理,目标创建,参考计算和查询界面。 标准接口的实现。

           (5) 用C++写一个独立的ActiveX控件,你必须亲自书写实现每个接口的每种方法。

二、1、创建ATL Project

步骤1:建立一个解决方案。   步骤2:在 该解决方案中,新建一个 vc++ 的 ATL 项目。见下图

 选择Dynamic-link library(DLL)

 2、向工程中添加ATL对象

 选择ATL Simple Object

 名字为FunTest

 Interface选择Custom

 3、在接口中添加方法.(在类视图中)

方法名为Sum,参数如下图,有三个参数

 

接口方法的实现, 这个太简单了

STDMETHODIMP CFunTest::Sum(LONG num1, LONG num2, LONG* pVal)
{
     // TODO: Add your implementation code here
     *pVal = num1 + num2;
     return  S_OK;
}

 

三、新建Win 32 Application进行测试

#include "E:\..\ATLProjectTest\ATLProjectTest_i.h"
#include "E:\..\ATLProjectTest\ATLProjectTest_i.c"
int  main( void )
{
 
     //声明HRESULT和iFun接口指针
     IFunTest * iFun = NULL;
 
     //初始化COM
     HRESULT hr = CoInitialize(NULL);
 
     //使用SUCCEEDED宏并检查我们是否能得到一个接口指针
     if  (SUCCEEDED(hr))
     {
         hr = CoCreateInstance(CLSID_FunTest,NULL,CLSCTX_INPROC_SERVER,IID_IFunTest,( void **)&iFun);
     }
 
     //如果成功,则调用Sum方法,否则显示相应的出错信息
     if  (SUCCEEDED(hr))
     {
         long  ReturnValue;
         iFun->Sum(30,32,&ReturnValue);
         cout << "The return value for 30 + 32 is :"  << ReturnValue << endl;
         iFun->Release();
     }
     else
     {
         cout << "CoCreateInstance Failed."  << endl;
     }
     //释放COM
     CoUninitialize();
     return  0;
}

  

显示:

四、在C# 项目中进行测试步骤

1、添加引用(选择Com),找到对应的DLL

2、引用命名空间,(引用对应的命名空间)

3、new实例,调用函数

可参考:.Net 互操作性http://www.cnblogs.com/linlf03/archive/2011/09/24/2189621.html



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/11/18/2254233.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
测试技术 C# 数据库
C# 单元测试框架 NUnit 一分钟浅谈
【10月更文挑战第17天】单元测试是软件开发中重要的质量保证手段,NUnit 是一个广泛使用的 .NET 单元测试框架。本文从基础到进阶介绍了 NUnit 的使用方法,包括安装、基本用法、参数化测试、异步测试等,并探讨了常见问题和易错点,旨在帮助开发者有效利用单元测试提高代码质量和开发效率。
158 64
|
7天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
48 13
|
17天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
25 6
|
18天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
25 1
|
21天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
26 4
|
26天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
1月前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
2月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
245 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
1月前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
55 7
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
68 1