多年来 COM 对象一直是 Windows 编程的基础,不可避免的是,在向.NET过渡时,还是需要继续使用现有的COM对象。“互操作性封送处理”是一个打包过程,在将参数和返回值移动到 COM 对象或从 COM 对象移出时,此过程将这些参数和返回值打包为等价的数据类型。
公共语言运行库通过名为运行库可调用包装 (Runtime Callable Wrapper,RCW) 的代理来公开 COM 对象。虽然 RCW 在 .NET 客户端看来是普通的对象,但它的主要功能是封送在 .NET 客户端和 COM 对象之间传递的调用。同时.NET提供Interop 程序集,它用作托管和非托管代码之间的桥梁,将 COM 对象成员映射为等价的 .NET 托管成员。
下面介绍采用VC++6.0与VS2005(C#)编写的DLL/COM的各种调用方法
1. VC编写的DLL在VC中调用
(1)VC编写DLL程序
新建"Win32 Dynamic-Link Library"工程->"一个可以导出某些符号的DLL工程"->完成
添加变量、函数、类
#ifdef MYVCDLL_EXPORTS
#define MYVCDLL_API __declspec(dllexport)
#else
#define MYVCDLL_API __declspec(dllimport)
#endif
自定义函数/
MYVCDLL_API bool myFunction(void);
自定义变量/
extern MYVCDLL_API int myVar;
自定义类///
class MYVCDLL_API MyCCalculator
{
public:
int subtract(int a, int b);
int add(int a, int b);
MyCCalculator();
virtual ~MyCCalculator();
};
(2)VC编写DLL调用程序
#include "stdafx.h"
#include "MyVcDll/MyVcDll.h"
#include "MyVcDll/MyCCalculator.h"
#pragma comment(lib, "MyVcDll//Debug//MyVcDll.lib")
int main(int argc, char* argv[])
{
// 调用DLL