C++ 对象作为接口(interface)方法的参数

标签 c++ windows dll com

对于我的 C++ DLL,我使用带有抽象接口(interface)的工厂模式。
this article的缺点部分,它说:

An abstract interface method cannot return or accept a regular C++ object as a parameter. It has be either a built-in type (like int, double, char*, etc.) or another abstract interface. It is the same limitation as for COM interfaces.

您能详细说明这是什么意思吗?我不能做什么,为什么?
关于这个问题是否有任何进一步的阅读 Material ?

最佳答案

这个说法看起来不准确。抽象接口(interface)方法可以返回或接受 C++ 类实例(或其指针)作为参数。这里没有类似 COM 的限制。尽管调用者/被调用者是使用不同的编译器设置、对齐、使用不同的分配器等构建的,但它可能是不安全的。在这种情况下,相同的 C++ 类的定义略有不同,不匹配可能会导致意外行为。也就是说,不是“不能”,而是可能会导致不明显的问题。

有关问题的一个常见示例是将 CString 作为参数传递:

关于C++ 对象作为接口(interface)方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816558/

相关文章:

c - 键盘 Hook

c# - 可以让 Python 从 C# 接收可变长度的字符串数组吗?

c++ - 185000阵列后BFPRT(中位数中值)算法崩溃

c++ - 为什么我在这里得到一个 EXC_BAD_ACCESS 以及如何让它工作?

c - 有没有可能获得函数的内存入口点?

wpf - 如何在 WPF 应用程序中使用 Windows 8 运行时类 MediaCapture 来显示网络摄像头预览?

c++ - 列出 Mac 上的登录 session

C++ Alt-Tab 钩子(Hook)

c - 将 C 代码从一个操作系统移植到另一个操作系统时处理静态库

dll - 从 .NET DLL 调用 VB6 方法