⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 经验交流,从网上下载的好东西望大家分享
💻 CPP
字号:
// client.cpp
#include <iostream.h>
#include "Component\component.h" // Generated by MIDL

void main()
{
	cout << "Client: Calling CoInitialize()" << endl;
	CoInitialize(NULL);
	
	IUnknown* pUnknown;
	IDispatch* pDispatch;

	cout << "Client: Calling CoCreateInstance()" << endl;
	CoCreateInstance(CLSID_InsideCOM, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);

	cout << "Client: Calling QueryInterface() for IDispatch on " << pUnknown << endl;
	pUnknown->QueryInterface(IID_IDispatch, (void**)&pDispatch);

	cout << "Client: Calling Release() for IUnknown on " << pUnknown << endl;
	pUnknown->Release();

	cout << "Client: Calling GetIDsOfNames" << endl;
	OLECHAR* name = L"Sum";
	DISPID dispid;
	pDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid);
	cout << "GetIDsOfNames(Sum) = " << dispid << endl;
		
	VARIANTARG test[2];
	VariantInit(&test[0]);
	test[0].vt = VT_I4;
	test[0].lVal = 7;
	VariantInit(&test[1]);
	test[1].vt = VT_I4;
	test[1].lVal = 2;

	VARIANT result;
	VariantInit(&result);

	DISPPARAMS param = { test, 0, 2, NULL };
	if(FAILED(pDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, &param, &result, NULL, NULL)))
		cout << "pDispatch->Invoke() failed" << endl;

	cout << test[0].lVal << " + " << test[1].lVal << " = " << result.lVal << endl;

	IDispatchEx* pDispEx;
	pDispatch->QueryInterface(IID_IDispatchEx, (void**)&pDispEx);

	DISPID new_dispid;
	HRESULT hr = pDispEx->GetDispID(L"NewMethod", fdexNameEnsure, &new_dispid);
	
	if(hr == DISP_E_UNKNOWNNAME)
		cout << "ERROR: DISP_E_UNKNOWNNAME" << endl;

	cout << "dispid = " << new_dispid << endl; 

	test[0].lVal = 4;
	test[1].lVal = 3;
	hr = pDispEx->InvokeEx(new_dispid, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &param, &result, NULL, NULL);
	cout << test[0].lVal << " + " << test[1].lVal << " = " << result.lVal << endl;

	pDispEx->GetDispID(L"Sum", 0, &new_dispid);
	cout << "Sum = " << new_dispid << endl; 

	pDispEx->Release();

	pDispatch->Release();

	cout << "Client: Calling CoUninitialize()" << endl;
	CoUninitialize();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -