1. com 组件调用:
CLSID clsid;
IDispatch* pDisp;
HRESULT hr = ::CLSIDFromProgID(L"MyMathComPro.MathFunc.1",&clsid);
if (FAILED(hr)) {
return ;
}
hr = ::CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IDispatch,(LPVOID*)&pDisp);
if (FAILED(hr)) {
return ;
}
int a = 0, b = 5,c = 8;
if( pDisp )
{
CComDispatchDriverspDisp(pDisp);
VARIANT vIn[2];
vIn[0].vt = VT_INT;
vIn[0].lVal = b;
vIn[1].vt = VT_INT;
vIn[1].lVal = c;
VARIANTvRet;
HRESULThr = spDisp.InvokeN(_T("MathOut"), vIn,2, &vRet );
a = vRet.lVal;
}
客户端调用:
IDispatch*pDisp = EClientKernel::QueryService(_T("MathFunc"));
Dll要放到安装目录的service目录下面,才可以调用成功
2. com组件的编写:
STDMETHODIMP CMathFunc::MathOut(VARIANTa, VARIANTb, VARIANT*pResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
int out;
MathImpl::instance().MyAddFunc(VToInt(a,0),VToInt(b,0),out);
pResult->vt = VT_INT;
pResult->intVal = out;
return S_OK;
}
功能实现类:
class MathImpl
{
public:
MathImpl(void);
~MathImpl(void);
void MyAddFunc(int a, int b, int& c);
public:
static MathImpl&instance() {
static MathImpl obj;
return obj;
}
};