Статья: Оформление класса в виде COM объекта в C++
:
LPCSTR GetMyRec(long id);
LPCSTR GetMyRec(LPCSTR Name);
AddRec ();
AddRec (long id);
AddRec (long id, LPCSTR Name);
:.
}
Это вполне законный код С++, но COM не разрешит вам в интерфейсе объявить два метода с одним именем. Это противоречит концепции.
Решение
Можно связать функции с разными методами интерфейса для этого в odl пишим
[id(1)] BSTR AddRecName(BSTR ID);
[id(2)] BSTR AddRecID(long ID);
а в cpp осуществляем привязку.
BEGIN_DISPATCH_MAP(:.)
DISP_FUNCTION(CPSDG, "AddRecName", AddRec, VTS_BSTR, VTS_BSTR)
DISP_FUNCTION(CPSDG, "AddRecId", AddRec, VTS_BSTR, VTS_I2)
DISP_FUNCTION_ID(:.)
END_DISPATCH_MAP()
Можно написать прокси функции. Например для GetMyRec прототип может выглядеть так
LPCSTR GetMyRec (VARIANT id)
{
switch id.vt
{case VT_I4: { return GetMyRec(id.lVal); }
case VT_BSTR: { return GetMyRec(id.bstrVal); }
}
return S_OK;
}
Для функции AddRec можно сделать вот так