c++中,可选参数,eg: int Fun(char* a="aaa", int b=333); 3种调用都可以:Fun()、Fun("bbb")、Fun("bbb", 444); 注意: 1. 可选参数须在函数参数的最右边,调用时不能跨可选参数调用,即Fun(444)不可以。 2. 类,头文件申明了可选参数(即变量赋值),实现文件函数参数可不必写变量赋值, 即头文件申明int fun(int a=3);实现文件int fun(int a) {printf--a=3}; mfc做的activeX控件,网页调用可选参数的函数,现说下我的解决方法: 该可选参数,类型必须申明为VATIANT类型,具体如下: <1> idl文件中:[id(2)] LONG Fun([optional]VARIANT a, [optional]VARIANT b); <2> 头文件中:LONG FUN(VATIANT &a, VATIANT &b); <3> 实现文件中: 1. DISP_FUNCTION_ID(CXXCtrl, "Fun", dispidFun, Fun, VT_I4, VTS_VARIANT VTS_VARIANT) 2. 见如下代码:
LONG CXXCtrl::Fun(VATIANT &a, VATIANT &b) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString csTemp; if (a.vt == VT_DISPATCH) //这个类型困扰我多时,不了解,网上资料也很少,经长时间探索和测试,得出此方法可行 { MessageBox("VT_DISPATCH"); IDispatch *varCon = a.pdispVal; VARIANT varResult = {0}; DISPPARAMS params = {NULL, NULL, 0, 0}; varCon->Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &varResult, NULL, NULL); csTemp = varResult.bstrVal; MessageBox(csTemp); } else if (a.vt == VT_BSTR) { MessageBox("VT_BSTR"); csTemp = a.bstrVal; MessageBox(csTemp); } else { //... } //................ }参考文档或链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms221479(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/aa705925(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/cc237569.aspx
http://www.cnblogs.com/jzxx/p/5521026.html
