下面的例子中,我们来调用一下系统自带的Win32函数MessageBoxA,这个函数位于系统的激消COM组件user32.dll当中,我们明握知调用的代码如下:
using System
using System.Runtime.InteropServices
class Test{[DllImport( "user32.dll "皮孝)]
public static extern int MessageBoxA(inthWnd,string strMsg,string strCaption,intnType)
public static void Main(){int myMsg
myMsg=MessageBoxA(0, "Hello! ", "test ",0)}}切换到MS-DOS命令行下面,运行:
C:\ csc Test.cs
编译完毕我们的C#应用程序之后,直接运行就可以看到对话框了!
需要注意的是,在调用COM组件之前,我们需要在.NET程序中引用名称空间:System.Runtime.InteropServices。因为我们需要使用这个名称空间所提供的一个方法:DllImport。
你需要做的是:
1.做一个COM+的.NET封装(可以直接在VS.NET中引用COM组件,也可以使用Regsvcs.exe命令自己完成)
2.在项目中引用上面产生的dll最好可以帖出你的代码,这样大家判断的才准确!
使用import引入的方式比较简单,用智能指针来调用
#import "薯芦扰C:\a.dll" no_namespace // 不知道名字空间的数旦话必须加上no_namespace//在应用程序类的InitInstance函数添加:
CLSID clsid
CLSIDFromProgID(OLESTR("a.GetRes"),&clsid)
CComPtr<IGetRes> pGetRes 哗陵//智能指针
pGetRes.CoCreateInstance(clsid)
pGetRes->Hello() // 调用接口
// 在程序结束,例如Onclose处释放
pGetRes.Release()
CoUninitialize()
才把中间的环节打通,现在写出来为大家提供方便,这里包含了四个类型: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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)