int main()
{
	// Initialize COM.
	HRESULT hr = CoInitialize(nullptr);

	// Create the interface pointer.
	ICalculator *calculator = nullptr;
	hr = CoCreateInstance(__uuidof(Calculator), nullptr, CLSCTX_INPROC_SERVER, __uuidof(ICalculator), (void**)&calculator);

	long result = 0;

	// Addition
	calculator->Add(1, 1, &result);
	std::cout << "1 + 1 = " << result << std::endl;

	// Subtraction
	calculator->Subtract(10, 5, &result);
	std::cout << "10 - 5 = " << result << std::endl;

	// Multiplication
	calculator->Multiply(10, 10, &result);
	std::cout << "10 * 10 = " << result << std::endl;

	// Division
	calculator->Divide(10, 5, &result);
	std::cout << "10 / 5 = " << result << std::endl;

	// Passing string to COM C# library

	// This is more appropriate:
	// BSTR number = _bstr_t("100");
	// calculator->ToNumber(number, &result);

	// This is shorter
	calculator->ToNumber(_bstr_t("100"), &result);
	std::cout << "Convert string \"100\" to number: " << result << std::endl;

	system("pause");

	CoUninitialize();

	return 0;
}