C#通过COM组件调用C++的代码

C#通过COM组件调用C++的代码

ID:37690192

大小:800.50 KB

页数:13页

时间:2019-05-28

C#通过COM组件调用C++的代码_第1页
C#通过COM组件调用C++的代码_第2页
C#通过COM组件调用C++的代码_第3页
C#通过COM组件调用C++的代码_第4页
C#通过COM组件调用C++的代码_第5页
资源描述:

《C#通过COM组件调用C++的代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C#通过COM组件调用C++的代码这个主题在《c#高级编程》中有提到,可以下本电子书来看看。一下我也列出自己的学习笔记。根据网上的说法,C#调用C++至少有以下几种方法:1通过COM组件调用2通过MC++转接3利用Intptr 由于我只能成功使用COM组件的方法,所以下面只谈一下这个方法。 一.通过ALT建立COM组件1、创建ATLProject步骤1:建立一个解决方案。  步骤2:在该解决方案中,新建一个vc++的ATL项目。见下图选择Dynamic-linklibrary(DLL)2、向工程中添加ATL对象选择ATLSimpleObject名字为FunTestI

2、nterface选择Custom3、在接口中添加方法.(在类视图中)方法名为Sum,参数如下图,有三个参数 接口方法的实现, 这个太简单了STDMETHODIMPCFunTest::Sum(LONGnum1,LONGnum2,LONG*pVal){//TODO:Addyourimplementationcodehere*pVal=num1+num2;returnS_OK;} 二.在C#中调用COM组件1、新建一个C#console项目,比如叫Test(winform的也是一样道理,只是Console调试更方便而已。第一次在C#中调用COM组件时,建议先用Consol

3、e试试,否则会搞得一头烟)2、添加引用:在弹出的对话框中选COM子页,找到ATLProjectTest1.0类型库(或类似的东西)就会发现在Test->引用下多了ATLProjectTestLib3在主函数(program.cs)中调用组件usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingATLProjectTestLib;namespaceTest{classProgram{staticvoidMain(string[]args){ATLProjec

4、tTestLib.FunTestClassf1=newFunTestClass();Console.Write(f1.Sum(3,4));}}} 三.很多的细节及注意事项仅按上面一步步地操作下来发现还会出错,会说找不到XXCOM组件,或是COM组件没注册。实际上很多不当操作都会导致上面这个错误。只有当你生成的文件中有Interop.ATLProjectTestLib.dll时,你才算成功了。1、所有修改都要重新编译。如修改了ATL项目,首先要重新编译ATL,再重新编译C#project。当把项目移到另一台计算机,有时编译器由于ATL项目没有被修改,而不会重新编译,这

5、就无法写注册表。这时可以把ATL项目的Debug文件夹删除,再重新编译。2、在创建ATLproject时,由于一个选Dual或Custom的地方,我认为应该选Dual,但网上较多文章选Custom。以下是选了Custom后应做的补救,回到ATLProjectTest,在ATLProjectTest.idl中(或双击类视图->IFunTest)import"oaidl.idl";import"ocidl.idl";[object,uuid(90477521-7218-4CA1-AADC-EAF3C42AB24B),dual,//--------按原做法不设这个属性,只

6、有设了这个属性才不会错helpstring("IFunTest接口"),pointer_default(unique)] 3、ATL默认按32位编译,而C#中一般是按anyCPU形式,像我是64位机的就要小心了。要改一下C#项目中的生成规则。点击项目的属性页:设置目标平台为x864、做完上面这3点,大概Test应该能运行了。可以先跳到第四大点看完后再倒回来。在实际的工程中,一般有很多个项目,假设以C#项目为主,还有一个ATL项目ATLProjectTest。而这个ATLProjectTest被Business项目(逻辑层)调用,而Business又被Form项目(用

7、户层)调用,这都是很常见的。在“编译”时就不能直接启动调试,要按ATLProjectTest->Business->Form的顺序一个个地生成项目。5、有时会因为找不到Interop.ATLProjectTestLib.dll而出错,可以试着把各个项目的输出路径都改到同一个文件夹(如用户层工程的文件夹)。四.更具体的编程ATL与C#类型对应ATLC#LONGintDOUBLEdoubleCHARsbyteVARIANT_BOOLboolBSTRstring*ref在C++中更多用STLstring来写BSTR与STLstring的转化方法#include

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。