怎么用Vc++6.0调用一个.Net编写的Com+服务组件

来自:    更新日期:早些时候
C#中怎么使用C++写的COM组件~

1、新建一个C# console项目,比如叫Test(winform的也是一样道理,只是Console调试更方便而已。第一次在C#中调用COM组件时,建议先用Console试试,否则会搞得一头烟)
2、添加引用:

在弹出的对话框中选COM子页,找到ATLProjectTest 1.0类型库(或类似的东西)
就会发现在Test->引用下多了ATLProjectTestLib

3在主函数(program.cs)中调用组件

using System;using System.Collections.Generic;using System.Linq;using System.Text;using ATLProjectTestLib;namespace Test{ class Program{ static void Main(string[] args){ATLProjectTestLib.FunTestClass f1 = new FunTestClass();Console.Write (f1.Sum(3,4));}} }

为了帮助读者更快地体会到使用VC++编写COM client的效果,我建议您从上诉链接中下载最新的release,并按照如下步骤搭一个简单的测试环境:
Step1. 使用Visual Studio 2008打开CodeFx的solution文件(Visual Studio需要run as admin)。
Step2. Build其中的CppCOMClient和MFCCOMClient示例。由于项目依赖性的设置,这两个VC++ example所依赖于的COM组件(CSDllCOMServer, ATLDllCOMServer, ATLExeCOMServer)也会被编译并注册。
Step3. 直接运行CppCOMClient,并得到如下输出。CppCOMClient演示的是使用native C++来创建和使用进程内COM组件。这个COM组件既可以是用native代码写的,也可以是用.NET语言写的。
Step4. 直接运行MFCCOMClient,并得到如下输出。MFCCOMClient演示的是使用MFC的class wizard来创建并使用一个进程外的COM组件。
简单的测试到此结束。下面我们来看看编写一个VC++的程序来使用COM组件的一般方法:方法一:直接使用COM API,例如,CoCreateInstance以及IDispatch接口中定义的方法GetIDsOfNames,Invoke来创建和使用COM组件。当然,前提是那个COM组件支持IDispatch。CodeFx/CppCOMClient/RawAPI.cpp是该方法所对应的例子。
方法二:使用VC++的#import directive,导入目标COM组件的type library并自动生成一套包装好的强类型的类和智能指针。这极大程度地方便了开发人员,因为生成的类和智能指针将复杂的COM API,类型转换等内容都隐藏了起来,同时开发者还可以受益于Visual Studio的intellisense。CodeFx/CppCOMClient/ImportDirective.cpp是该方法所对应的例子。另外,值得注意的是,这个例子演示了使用一个.NET 写的COM组件(CSDllCOMServer)。对于.NET写的COM组件,我们额外需要#import mscorlib.tlb。
方法三:如果您开发的程序支持MFC,那您将更大程度地得益于MFC强大的class wizard。这个class wizard将方法二中的#import directive都封装隐藏了。您只需轻点几下鼠标,便可以无缝透明地创建和使用COM组件,就好像他是一个普通的class一般。

才把中间的环节打通,现在写出来为大家提供方便,这里包含了四个类型:
1、在VS2005中,C#编写DLL并使用C++调用
2、在VS2005中C#编写的COM组件,使用VC6.0调用
3、在VC6.0中编写COM组件,使用VS2005 C#调用
4、在VC6.0中编写COM组件,使用VC6.0调用
其中每个类型都写了两个程序,一个为COM组件程序,一个为调用程序
程序实现:
1、在VS2005中,C#编写DLL并使用C++调用
(1)C#编写DLL程序
建立C#编写的DLL程序AddDll,项目类型为:类库
程序代码:
using System;
using System.Collections.Generic;
using System.Text;

namespace AddDll
{
public class Add
{
public int iadd(int a, int b)
{
int c = a + b;
return c;
}
}
}

(2)C++编写调用程序
建立C++的Win32控制台应用程序UseDll,项目类型为:Win32控制台应用程序
配置:右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”
公共语言运行库设置
C++编写调用程序:公共语言运行库设置
程序代码:
#include "stdafx.h"
#include "stdio.h"

#using "../debug/AddDll.dll"
using namespace AddDll;

int _tmain(int argc, _TCHAR* argv[])
{
int result;
Add ^add = gcnew Add();
result = add->iadd(10,90);
printf("%d",result);
scanf("%s");
return 0;
}

2、在VS2005中C#编写的COM组件,使用VC6.0调用
(1)VS2005中使用C#编写COM组件
建立C#编写的COM组件,项目类型为类库
配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)”
打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)]
这用就可以生成AddCom.tlb文件

VS2005中使用C#编写COM组件:COM生成设置
程序代码:
using System;
using System.Collections.Generic;
using System.Text;
u

(2)VC6.0编写调用程序
使用VC6.0编写建立MFC应用程序UseCom,项目类型为MFC AppWizard(exe)

3、在VC6.0中编写COM组件,使用VS2005 C#调用
(1)VC6.0编写COM
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:

(2)VS2005使用C#编写调用程序(网站程序)
使用VS2005建立网站UseCom
配置:在解决方案资源管理器中的主目录点击右键,选择添加引用,选择COM,添加刚刚建立的AddCom 1.0 Type Library
在程序中要using编写的COM组件:using ADDCOMLib;
引用COM
VS2005使用C#编写调用程序:引用COM
程序代码:
u

4、在VC6.0中编写COM组件,使用VC6.0调用
(1)VC6.0编写COM组件
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:

(2)VC6.0编写调用程序
使用VC6.0建立MFC应用程序UseCOM,调用刚刚建立的COM组件
将上面程序AddCom生成的AddCom.dll放入本程序的工程目录和程序生成目录中
在StdAfx.h中加入:

代码请参考:http://blog.csdn.net/fwj380891124/article/details/6719669


怎么用Vc++6.0调用一个.Net编写的Com+服务组件视频

相关评论:
  • 18791897666vc6.0中 一个工程下,只能有一个main函数,我想建多个c文件,怎么办。
    尹屈欢工作区建立两个工程文件,分别添加对应.c主程序 需要编译运行a01时--右键a01 files--设为活动工程--左键a1.c--编译运行 编译运行a02操作通步骤2

  • 18791897666本人现在欲用VC++6.0 调用VISSIM 的COM接口
    尹屈欢用vc的automation调用VISSIM文件下的tlb去,马上会给你生成一个vc能调用的class。用此方法,大部分的高级的软件都可以本地化调用,入photoshop、visio、autocad、domino lotus123,word。

  • 18791897666vc6.0怎么用
    尹屈欢1、打开VC++6.0,按左上角菜单栏的“文件”-->“新建”,打开如下界面 2、在左边的列表中选择“Win32 Console Application”,即win32控制台工程,控制台就类似windows中的cmd窗口,刚开始编程,选择创建这个工程就可以了。在右边输入工程名称,我在这里输入“FirstProgram”,位置选择一个存放该工程的...

  • 18791897666VC6.0如何调试同一个工作空间的两个工程(2个exe)
    尹屈欢先F5启动一个exe进入调试状态,然后用附加进程的方法启动另一个exe,这样就可以同时调试两个进程了。

  • 18791897666vc6.0中,如何在编辑框中输入完后,按回车键能响应某个控件的函数,效果就 ...
    尹屈欢将该按钮设为默认按钮就行。打开该按扭的属性将default button设为True就可以了。这个方法是最简单的.还有其它的方法很多方法,此处不讲了。:

  • 18791897666怎么用vc++6.0编写程序
    尹屈欢vc++6.0是微软比较老的C++集成开发环境,是微软visual studio的一员,一般用于新手学习C++使用,也有人用习惯了vc6.0,只是将其做为一个编辑器,因为新版的visual studio真的是太卡了,如果是老手更建议使用gvim+makefile文件来解决visual studio太卡、太大的问题,这里以win8系统为例,说明如何使用vc...

  • 18791897666我用VC++6.0建了一个基于对话框的登录界面,我想用登录界面中按钮进入...
    尹屈欢用的是MFC?这个东西不是一下子能说清楚的,我说一点简单的吧,建议你自己去图书馆借一点书来看。你先得把每个对话框都定义一个类名。例如定义了CExample1 CExample2这两个对话框 点击ClassView =>Globals => theApp 找到BOOL CGhApp::InitInstance()这个函数 可以把里面的东西都删了,保留return ...

  • 18791897666如何使用VC++6.0编写一个MFC界面,用于毕设设计中个人防火墙的界面?_百度...
    尹屈欢大致过程应该是样的 (1)先用VC的工具 添加一个对话框应该程序 (2)加入两个tabview 控件,同时为该控制添加类 (3)再在 tabview 下添加你想用的 button list choice控件等 (4)再添加相应的控件功能实现代码 不懂的可以来问我

  • 18791897666VC++6.0中,请教DLL使用计时器或者线程实现循环执行某个功能的问题?
    尹屈欢其实,DLL与EXE是非常不同的两类可执行模块,尤其在线程的创建释放等事务上面,而对于在DLLMAIN中创建线程,那则是非常不能原谅的事情,因为此时创建的线程无法正常释放。不过,要解决你这个问题,其实并不是很难的事情,有如下几步:1. 运行一个DLL。2. 在DLL加载完成之后,显示的使用函数启动一个线程...

  • 18791897666怎样在VC++6.0下使用DLL?
    尹屈欢然后就可以再项目中使用dll中的函数或者变量,就像使用普通的函数和变量一样。(2)动态加载:第一步,使用LoadLibrary(PCTSTR)函数将dll加载到程序的运行空间;第二步,使用GetProcAddress(HINSTANCE, PCSTR)获得指向需要使用的函数的指针;第三步,通过获得的函数指针调用dll中的函数;最后当确定不需要再使用...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网