互操作(如何实现 - Visual C++)
更新:2007 年 11 月
本页链接到有关任务的帮助,这些任务与使用 Visual C++ 进行互操作相关。若要查看“帮助”中涉及的其他类别的常见任务,请参见如何实现 - Visual C++。
CLR/本机互操作性
混合、纯 MSIL 和可验证编译模式的功能比较
比较三种不同 /clr 编译模式的功能。如何:迁移到 /clr
讨论使用 /clr 编译本机代码和将项目转换为托管项目时引发的问题。如何:使用 /clr 编译 MFC 和 ATL 代码
讨论如何编译现有的 MFC 和 ATL 程序,以面向公共语言运行库。混合(本机和托管)程序集
描述开发人员如何混合使用托管功能和非托管功能来创作应用程序。Interop 的性能注意事项 (C++)
提供减小托管/非托管互操作转换对运行时性能影响的准则。How to: Declare public and private on Native Classes
演示如何从托管类型引用本机类型。How to: Pass a Delegate^ to a Native Function Expecting a Function Pointer
演示如何使用函数指针参数从托管组件调用本机函数,然后本机函数可以调用托管组件的委托的成员函数。如何:访问 System::String 中的字符
演示如何访问 String 对象的字符,以实现对接受 wchar_t* 字符串的非托管函数的高性能调用。如何:向全局程序集缓存添加本机 DLL
描述如何将本机 DLL(不是 COM)放入全局程序集缓存中。如何:在 System::Guid 与 _GUID 之间进行转换
演示如何在 Guid 和 _GUID 之间进行转换。如何:将 char * 字符串转换为 System::Byte 数组
演示将 char * 字符串转换为 Byte 数组的最有效方法是使用 Marshal 类。如何:将标准字符串转换为 System::String
演示如何将标准 C++ 库字符串 (<string>) 转换为 String。如何:将 System::String 转换为标准字符串
演示如何将 String 转换为标准 C++ 库字符串 (<string>)。如何:将 System::String 转换为 wchar_t* 或 char*
描述如何在 Vcclr.h 中使用 PtrToStringChars 将 String 转换为本机 wchar_t * 或 char *。如何:使用本机类型声明句柄
演示如何在本机堆栈上创建 gcroot 对象。如何:确定映像为本机映像还是 CLR 映像
演示如何通过编程方式检查某个映像是否是为公共语言运行库生成的。如何:在本机函数中保存对象引用
描述如何使用 gcroot.h(该文件包装了 GCHandle)在非托管内存中保存 CLR 对象引用。如何:在本机类型中保存对值类型的引用
描述如何在已装箱的类型上使用 gcroot,以便在本机类型中保存对值类型的引用。如何:获取字节数组的指针
描述如何通过获取第一个元素的地址并将其分配给指针,来获取指向 Byte 数组中的数组块的指针。如何:在 /clr 编译中使用本机类型
演示如何在 /clr 编译中定义本机类型,以及如何从程序集内部使用该本机类型。如何:包装本机类以供 C# 使用
演示如何包装本机 C++ 类,以便用 C# 或其他 .NET 语言编写的代码可以使用它。
C++ Interop
如何:使用 C++ Interop 封送 ANSI 字符串
演示如何使用 C++ Interop 在托管代码和本机代码之间封送 ANSI 字符串。如何:使用 C++ Interop 封送 Unicode 字符串
演示如何使用 C++ Interop 在托管代码和本机代码之间封送 Unicode 字符串。如何:使用 C++ Interop 封送 COM 字符串
演示如何使用 C++ Interop 在托管代码和本机代码之间封送 COM 字符串。如何:使用 C++ Interop 封送结构
演示如何使用 C++ Interop 在托管代码和本机代码之间封送 struct。如何:使用 C++ Interop 封送数组
演示如何使用 C++ Interop 在托管代码和本机代码之间封送数组。如何:使用 C++ Interop 封送回调和委托
演示如何使用 C++ Interop 在托管代码和本机代码之间封送回调和委托。如何:使用 C++ Interop 封送嵌入式指针
演示如何使用 C++ Interop 在托管代码和本机代码之间封送嵌入指针。如何:指定 out 参数
演示如何将函数参数指定为 out 参数,以及如何从 C# 程序中调用该函数。
COM 互操作
使用 .NET 中的本机 COM 服务器
描述使用 .NET 应用程序中现有 COM 组件时的可用选项,并概括介绍了每种方法的优点和缺点。如何:将本机 COM 服务器用于 TLBIMP
演示如何使用 类型库导入程序 (Tlbimp.exe) 工具从托管代码使用 COM 对象。如何:将本机 COM 服务器与 CRCW 一起使用
演示如何使用自定义运行库可调用包装从托管代码使用 COM 对象。向 COM 公开 .NET Framework 组件
描述编写与 COM 客户端互操作的托管代码的几条提示。
P/Invoke
如何:使用 PInvoke 封送字符串
解释如何使用平台调用 (P/Invoke) 功能和 CLR 字符串类型 System.String,调用接受 C 样式字符串的本机函数。如何:使用 PInvoke 从托管代码调用本机 DLL
演示如何使用平台调用 (P/Invoke) 功能,从托管代码调用在非托管 DLL 中实现的函数。如何:使用 PInvoke 封送结构
解释如何使用平台调用 (P/Invoke) 功能,从托管代码调用接受 C 样式 struct 的本机函数。如何:使用 PInvoke 封送数组
解释如何使用平台调用 (P/Invoke) 功能,从托管代码调用接受 C 样式数组的本机函数。如何:使用 PInvoke 封送函数指针
解释在使用平台调用 (P/Invoke) 功能与非托管函数进行交互操作时,如何使用托管委托代替函数指针。如何:使用 PInvoke 封送嵌入式指针
解释如何使用平台调用 (P/Invoke) 功能封送嵌入的指针。如何:修改本机函数中的引用类
演示如何使用 PInvoke 服务向本机函数传递具有 CLR 数组的引用类,并且修改该类。如何:使用正则表达式分析字符串
描述如何通过获取第一个元素的地址并将其分配给指针,来获取指向 Byte 数组中的数组块的指针。
C++ 支持库
- 如何:扩展封送处理库
说明如何扩展封送处理库,从而在数据类型之间提供更多转换。
在 MFC 中使用 Windows 窗体
在 MFC 中使用 Windows 窗体用户控件
解释如何使用 MFC Windows 窗体支持类,在 MFC 对话框或视图内,将 MFC 应用程序内的 Windows 窗体控件作为 ActiveX 控件来承载。Windows 窗体/MFC 编程差异
提供有关 Windows 窗体和 MFC 之间的编程差异的背景信息。以 MFC 对话框的形式承载 Windows 窗体用户控件
描述如何使用 CWinFormsDialog 类将 Windows 窗体控件作为 MFC 对话框来承载。如何:创建用户控件并承载 MDI 视图
显示如何创建 .NET Frameworks 用户控件,在控件类库(特别是 Windows 控件库项目)中创作用户控件,然后将项目编译到程序集中。如何:向 Windows 窗体控件添加命令传送
演示如何使用 CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,使它可以处理 MFC 命令。如何:调用 Windows 窗体控件的属性和方法
解释建议添加用户控件类型的成员并在 IView::OnInitialUpdate 中将它初始化的原因。以 MFC 视图的形式承载 Windows 窗体用户控件
描述如何以 MFC 视图的形式承载 Windows 窗体用户控件。如何:创建用户控件并将它承载在对话框中
解释如何向新的基于对话的 MFC 项目添加用户控件。如何:使用 Windows 窗体执行 DDX/DDV 数据绑定
显示如何将本机 C++ 字符串绑定到 .NET 用户控件。如何:接收来自本机 C++ 类的 Windows 窗体事件
显示如何使本机 C++ 类接收托管事件的回调,这些事件是从 Windows 窗体控件或具有 MFC 宏映射格式的其他窗体引发的。接收视图和对话框中的事件类似于接收控件中的事件。在 MFC 对话框中承载 Windows 窗体用户控件
描述如何在 MFC 对话框中承载 Windows 窗体用户控件。如何:使用 Windows 窗体执行 DDX/DDV 数据绑定
显示如何将本机 C++ 字符串绑定到 .NET 用户控件。