NET中怎么调用COM组件?

NET中怎么调用COM组件?,第1张

.NET在设计之初就考虑到了如何方便的利用现有的各种技术资源,这也是微软的一贯作风,.NET的强大之处也可见一斑。.NET提供了大量的类库来方便的实现同COM的相互 *** 作,其中很重要的一个名称空间就是:System.Runtime.InteropServices。通过这个名称空间的名字我们也可以从字面上看出,“互 *** 作服务”。System.Runtime.InteropServices这个名称空间提供了一系列的类来对COM对象进行 *** 作。

下面的例子中,我们来调用一下系统自带的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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12497813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存