C#和C++之间的可选参数
Optional parameters across C# and C++
我开始思考可选参数如何在COM对象(C#)和C++对象(或任何其他语言)之间工作。
例如,我有一个用c#构建的COM对象,它具有DoSomething,它接受两个参数-par1和par2。其中,par2在方法定义中是可选的。
public void DoSomething(string par1, string par2 = "value2");
现在,C++如何解释DoSomething方法签名?如果我一直在COM对象中添加可选参数,那么在使用者级别(C++)是否会出现代码中断。
有什么意见吗?
是的,这正在崩溃。默认值由调用者应用,而不是由被调用者应用。
因此,您必须使用更新的类型库重新构建C++客户端程序。当您使用早期绑定时,忘记这样做是非常令人不快的,因为它会从堆栈中弹出太多参数。堆栈不平衡会产生非常恶劣的不当行为,几乎无法诊断。所以,不要走捷径不更新接口{guid},你会后悔的。只有通过后期绑定(DISP_E_BADPARAMCOUNT)才能得到好的诊断。
相关文章:
- C++模板参数之间的比较似乎被忽略了
- RVALUE参考与const lVALUE参考作为参数之间的混淆
- Rcpp 中值和引用参数之间的差异
- 是否可以找到两个模板参数之间表达式的类型
- C++和C#中指针和函数参数之间的等价性
- 如何根据模板两个整数参数之间的关系对模板进行部分专用化
- 如何在C++17中强制执行模板和模板模板参数之间的约束
- GoogleTest参数化测试-可以在参数之间调用SetUp和TearDown
- 在进行正向声明时,不命名参数和命名参数之间有区别吗
- 常量和常量引用参数之间的区别是什么
- 这些参数之间有什么区别
- C/C++,在使用全局参数或传递参数之间进行选择
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- 函数参数之间的差异
- 二维数组参数之间的区别是什么?
- & 和 * 作为参数之间的差异
- 在模板函数参数之间强制执行所需的关系
- 带括号和不带括号的可变参数之间的差异
- "类变量"、"类变量()"和"类变量(参数)"之间的区别
- 在C++中用 & 和 * 声明的函数参数之间的差异