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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
一、前言
  1、本回讲解的是在 
VS 2008 下的使用ATL. 并使用Win 32 ConsoleApplication进行测试以及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
     HRESULThr = 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、

Windows Mobile下SQLite的Native C++轻量封装实践 SQLite作为嵌入式场景中最主流的轻量级关系型数据,以其零配置、事务安全、单文件部署等特性,广泛应用于资源受限的工业终端设备。其底层基于C语言实现,天然适配Native开发,但在Windows Mobile这类已终止支持的嵌入式平台中,需直面ARMv4T指令集兼容、wchar_t编码转换、内存确定性管理及线程安全模型重构等核心挑战。本文聚焦SQLite在WM平台的本地化落地,深入解析C API直接封装、源码级编译适配、BOM敏感字符串处理、CriticalSection双重加锁等关键技术路径,为遗留系统 阅读详情

相关推荐

C#C++工程选型:从上位机到边缘AI的实战决策逻辑

在工业软件与嵌入式系统开发中,C#C++非简单的语言性能比拼,而是面向不同工程约束的技术契约选择。C#凭借.NET生态的确定性、调试链路完整性与COM/互操作能力,在上位机、HMI、遗留系统改造等场景提供可预测的交付节奏与低维护成本;C++则依托对内存、硬件资源与底层API的直接掌控力,在边缘AI推理、实时控制环、高密度计算等资源紧绷场景中不可替代。二者差异本质是抽象层级与控制粒度的权衡:C#降低工程风险,C++换取极致性能。本文结合产线MES、Jetson AI部署、三菱PLC互通等真实案例,解析如何

weixin_34357436的博客 353

C#响应ATL事件回调示例代码

private void button1_Click(object sender, EventArgs e) { try { TGOpenApiCtrl tg = new TGOpenApiCtrl(); _ITGOpenApiCtrlEvents_TGOpenApiCallbackEventHandler cb = new _ITGOpenApiCtrlEvents_TGOpenApiCallbackEventHandler(this.EventCallback); tg.TGOpenApiCallback += cb; tg.Init("1111563433", "7738fdd1881372ae2b48018924a1febd", null, null); } catch (Exception ex) { string msg = ex.Message; } } private void EventCallback(int eventID, int errorCode, string result) { try { this.SetText("eventID:" + eventID.ToString() + "\nerrorCode:" + errorCode.ToString() + "\nResult:" + result); } catch (Exception ex) { string msg = ex.Message; } }

深入理解Microsoft Visual C++ 2008运行支持

本文还有配套的精品资源,点击获取 简介:Microsoft Visual C++ 2008是一个强大的集成开发环境,它提供运行时、MFC、ATL等组件,使C++程序能在未安装Visual Studio的计算机上运行。这个运行支持是通过动态链接实现的,分为静态链接和动态链接,包含C++运行时、MFC、ATL、C运行时和标准模板等关键组件。通过安装vcredist_...

weixin_29363791的博客 2486

全套c#atl技术 源码

全套c# atl技术 开源源码 vs2008

VS 创建ATL组件(C++)

VS2017创建ATL工程及使用COM组件

小曹的博客 3624

C++- VS2022-创建ATL 有QT的工程-实例源码亲测可行,供大家参考

VS2022-创建ATL 有QT的工程,简单的demo.供大家参考。

aggie4628的专栏 1940

第一个 COM 程序例子

一、前言   1、IDE : vc6.0 (ATL 3.0)请阅读本回内容;        2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。   二、建立 ATL 工程   步骤2.1:建立一个工作区(WorkSpace)。

objectively的专栏 849

C#调用ATL COM

作者:朱金灿来源:http://blog.csdn.net/clever101 简单介绍C#程序如何调用ATL编写的COM组件。首先新建一个ATL工程,具体如下:1. 填写工程名称和路径,如下图: 2. 选择工程的服务器类型为动态链接,如下图:3. 添加一个ATL简单对象,如下图:4. 填写类名称,如下图:5. 选择类的线程模型及其它属性,如下图:6...

weixin_34326429的博客 241

VS2008ATL入门介绍样例及使用

一、前言   1、本回讲解的是在VS 2008 下的使用ATL. 使用Win 32 Console Application进行测试以及C#项目进行测试调用COM).   2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFunTest,它有一个简单的函数: Sum()完成两个数值的加法   3、ATL的介绍  ATL...

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 946

C++ VS 2008ATL创建使用C++项目中进行调用测试

一、前言   1、本回讲解的是在 VS 2008 下的使用ATL. 使用Win 32 Console Application进行测试以及C#项目进行测试调用COM).     2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFunTest,它有一个简单的函数: Sum()完成两个数值的加法   3、ATL的介绍   

子凡的专栏 986

C#调用C++类(以COM组件的形式)

如果想用C#调用C/C++写的函数,可以先将C/C++的函数写成dll文件,由C#用DllImport的方式来调用,但是这种方法无法调用C++写的类,如果想调用C++类,可以先把C++类封装成COM组件,再由C#调用。方法如下(以VS2008英文版为例说明) 一、新建一个Visual C++项目,类型为ATL Project,假设项目名为ComProject,直接点Finish即可。

Daven172的专栏 1079

[转]C#调用C++类(以COM组件的形式)

如果想用C#调用C/C++写的函数,可以先将C/C++的函数写成dll文件,由C#用DllImport的方式来调用,但是这种方法无法调用C++写的类,如果想调用C++类,可以先把C++类封装成COM组件,再由C#调用。方法如下(以VS2008英文版为例说明) 一、新建一个Visual C++项目,类型为ATL Project,假设项目名为ComProject,直接点Finish即可。 二、在...

weixin_34384557的博客 151

COM和.NET的互操作

C#调用COM组件   Daven172 C#调用C++类(以COM组件的形式) 如果想用C#调用C/C++写的函数,可以先将C/C++的函数写成dll文件,由C#用DllImport的方式来调用,但是这种方法无法调用C++写的类,如果想调用C++类,可以先把C++类封装成COM组件,再由C#调用。方法如下(以VS2008英文版

欢迎光临Andy511823558的空间 1246

VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(转)...

VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那么就说明该程序动态链接了VC9的运行时,(如果还用到了MFC,那么可能动态链接了VC9的MFC,同理还有ATL),以及缺少对应的manifest文件,程序在目标机器上没有找到这些和配置文件,因此...

weixin_34194551的博客 88
上一篇: [转载]VS2008下ATL应用实例
下一篇: 使用ATL编写一个简单的COM服务器
rundll64
博客等级 码龄18年 70粉丝 27原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值