C#和C ++中的可选参数

时间:2015-02-27 15:12:00

标签: c# c++ .net com optional-parameters

我开始考虑可选参数如何在COM对象(C#)和C ++对象(或任何其他语言)之间起作用。

例如,我有一个用c#构建的COM对象,它有 DoSomething ,它有两个参数 - par1和par2。其中,par2在方法定义中是可选的。

public void DoSomething(string par1, string par2 = "value2");

现在,C ++如何解释 DoSomething 方法签名?如果我在COM对象中不断添加可选参数,那么在消费者级别(C ++)是否会出现代码破坏。

有任何意见吗?

1 个答案:

答案 0 :(得分:2)

是的,这是破碎的。默认值由呼叫者应用,而不是被呼叫者。

因此,您必须使用更新的类型库重建C ++客户端程序。当你使用早期绑定时忘记这样做是非常非常令人不快的,它会从堆栈中弹出太多的参数。堆栈不平衡会产生非常令人讨厌的错误行为,几乎不可能诊断出来。因此,如果不更新界面{guid},请不要采取快捷方式,您会后悔。只有后期绑定(DISP_E_BADPARAMCOUNT)才能获得良好的诊断。