C++与C# DLL互调实例教程:C#到C++与COM组件调用详解

需积分: 5 1 下载量 29 浏览量 更新于2024-09-11 收藏 95KB PDF 举报
本文档详细介绍了如何在Visual Studio 2005环境下实现C++与C#之间的DLL交互。首先,我们从C#编写的DLL程序开始: 1. 创建一个名为"AddDll"的C#类库项目,其中包含一个名为"Add"的公共类,具有"iadd"方法,用于接收两个整数参数并返回它们的和。这个方法需要对外可见,以便C++可以调用。 ```csharp using System; using System.Collections.Generic; using System.Text; namespace AddDll { [ComVisible(true)] // 为了让C++能识别这个COM组件 public class Add { public int iadd(int a, int b) { int c = a + b; return c; } } } ``` 接着,创建一个C++ Win32控制台应用程序"UseDll",用来调用C#的DLL。在这个项目中,需要包含C# DLL的路径,并使用托管指针来访问C#类和方法。 ```cpp #include <windows.h> #include <stdio.h> #include "AddDll.tlb" // 如果是COM组件,则用AddCom.tlb using namespace std; using namespace AddDll; int _tmain(int argc, _TCHAR* argv[]) { Add^ add = gcnew Add(); // 创建托管对象 int result = add->iadd(10, 90); // 调用C#方法 printf("%d", result); scanf("%s"); return 0; } ``` 接下来,若要在VS2005中使用C#编写的COM组件被Visual C++ 6.0或Visual C++ 2005调用,需要进行以下步骤: - 在C#项目中,设置"AddCom"为类库项目类型。 - 配置项目属性,选择"生成" -> "为COMInterop注册(_P)",确保组件可见于C++环境。 - 在AssemblyInfo.cs中添加`[ComVisible(true)]`,表示组件为外部可见。 通过以上步骤,C++程序可以成功调用C#编写的DLL函数,反之亦然。这展示了两种不同编程语言在同一个开发环境中通过DLL交互的能力,这对于跨平台和组件重用是十分有用的。在实际项目中,确保正确配置编译选项和引用,是保证代码能够顺利运行的关键。