Esempio n. 1
0
File: CLI.cpp Progetto: gclxry/awd
void  STAClientCall()
{
    if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
    {
        COSERVERINFO si;
        COAUTHINFO ai;
        si.pAuthInfo = &ai;
        COAUTHIDENTITY authident;
        ai.pAuthIdentityData = &authident;
        IntializeServerInfo (si);

        MULTI_QI mqi;
        mqi.pIID = &IID_ICalculator;
        mqi.pItf = 0;
        mqi.hr = 0;

        wprintf(L"\nCalling CoCreateInstanceEx ... ");
        if (SUCCEEDED(CoCreateInstanceEx(
            CLSID_Calculator,
            NULL,
            CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
            &si,
            1,
            &mqi
        )))
        {
            wprintf(L"done\n");
            ICalculator * pCalculator = NULL;
            pCalculator = (ICalculator*)mqi.pItf;
            __int32 result = 0;
            wprintf(L"Calling SumSlow ...");
            pCalculator->SumSlow(1,2, &result);
            pCalculator->Release();
            wprintf(L"done\n");
        }
        else
        {
	        wprintf(L"failed\n");
        }
        CoUninitialize();
    }
}
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;
}
Esempio n. 3
0
int main(int argc, char* argv[])
{
    UNREFERENCED(argc);
    UNREFERENCED(argv);

    HRESULT Error = S_OK;
    Error = CoInitialize(NULL);     //初始化COM库

    if ( FAILED(Error) )
    {
        cout << "初始化COM库失败!" <<endl;
        goto exit;
    }

    long lResult = 0;               //保存运算结果

    ICalculator* pCalc = NULL;

    char* strExpression = NULL;       

    bool bException = false;

    char* str[50] = { "1+2=",           "2-1=",         "2*3=",         "6/3=",         "6/0=",
                      "1-2=",           "0+0=",         "0-0=",         "100!=",        "100E+2=",
                      "1+100D=",        "1+=",          "1+++1=",       "1---1=",       "1*+1=", 
                      "1+2===E===",     "10/11DD=",     "/8/2=",        "*1/1=",        "1/1!====", 
                      "1/1!===",        "1!/0=",        "1!*0=",        "1!/1=",        "1!/2=", 
                      "9!/3==",         "9!/3!=",       "1!*1=",        "1!+4=",        "9!/+-*3=",
                      "111/*-+111=",    "11*11d=",      "11/2=",        "65535+2=",     "65535!-2=",  
                      "60000*100=",     "60000!*100!=", "1+2+3+4+5=",   "32s+2=",       "20/5/5/5=", 
                      "20+5*2/5=",      "20=+5!=",      "2+3=4+2=",     "3+2*-7C2*3=",  "3*-2=3*8!=", 
                      "2+3=====",       "2/3=====",     "10e+20*10*8!=", "2*3E88D=",     "2+++++-*3="};

    //开始处理表达式,调用接口ICalculator进行计算
    for( int i=0; i<50; i++)
    {
        bException = false;

        Error = CoCreateInstance(
            CLSID_Calculator, 
            NULL, 
            CLSCTX_INPROC_SERVER, 
            IID_ICalculator, 
            reinterpret_cast<void**>(&pCalc)
            );

        if ( FAILED(Error) )
        {
            cout << "创建组件失败!" <<endl;
            goto exit;
        }

        strExpression = str[i];

        while (*strExpression != '\0')       
        {
            if ( bException )           //如果有异常产生则处理下一个表达式
            {
                break;
            }
            switch ( *strExpression )
            {
                case '0':
                    Error = pCalc->PutKey(LWK_0);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '1':
                    Error = pCalc->PutKey(LWK_1);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '2':
                    Error = pCalc->PutKey(LWK_2);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '3':
                    Error = pCalc->PutKey(LWK_3);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '4':
                    Error = pCalc->PutKey(LWK_4);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '5':
                    Error = pCalc->PutKey(LWK_5);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '6':
                    Error = pCalc->PutKey(LWK_6);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '7':
                    Error = pCalc->PutKey(LWK_7);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '8':
                    Error = pCalc->PutKey(LWK_8);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '9':
                    Error = pCalc->PutKey(LWK_9);

                    if (FAILED(Error))
                    {
                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '+':
                    Error = pCalc->PutKey(LWK_ADD);

                    if (FAILED(Error))
                    {
                        if ( Error == DIV_ZERO )
                        {
                            cout << "除数不能为零!" << endl;
                            bException = true;

                            break;
                        }

                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '-':
                    Error = pCalc->PutKey(LWK_SUB);

                    if (FAILED(Error))
                    {
                        if ( Error == DIV_ZERO )
                        {
                            cout << "除数不能为零!" << endl;
                            bException = true;

                            break;
                        }

                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '*':
                    Error = pCalc->PutKey(LWK_MUL);

                    if (FAILED(Error))
                    {
                        if ( Error == DIV_ZERO )
                        {
                            cout << "除数不能为零!" << endl;
                            bException = true;

                            break;
                        }

                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '/':
                    Error = pCalc->PutKey(LWK_DIV);

                    if (FAILED(Error))
                    {
                        if ( Error == DIV_ZERO )
                        {
                            cout << "除数不能为零!" << endl;
                            bException = true;

                            break;
                        }

                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '=':
                    Error = pCalc->PutKey(LWK_EQU);

                    if (FAILED(Error))
                    {
                        if ( Error == DIV_ZERO )
                        {
                            cout << "除数不能为零!" << endl;
                            bException = true;

                            break;
                        }

                        cout << "数据越界,范围-65536至65535" << endl;
                        bException = true;
                    }

                    break;

                case '!':
                    pCalc->PutKey(LWK_REV);

                    break;

                case 'C':
                case 'c':
                    pCalc->PutKey(LWK_C);

                    break;

                case 'E':
                case 'e':
                    pCalc->PutKey(LWK_CE);

                    break;

                case 'D':
                case 'd':
                    pCalc->PutKey(LWK_D);

                    break;

                default:
                    cout << "输入有非法字符!" << endl;
                    bException = true;

                    break;
            }

            strExpression++;

        }

        if ( !bException )                                      //没有异常产生就进行输出
        {
            pCalc->QueryResult(&lResult);                       //获取计算结果

            cout << i + 1 << ". "
                 << str[i] << lResult << endl;
        }

        pCalc->Release(); 
      }
exit:
    CoUninitialize();

    getchar();
    return 0;
}
Esempio n. 4
0
int main(int argc, char* argv[])
{
    if( argc != 2 )            //保证只接受一个表达式
    {
        cout << "参数不正确,只接受一个参数\n"
             << "请按照如下格式进行输入:\n"
             << "LWCTool.exe 19+8-7*12/25= ";

        return 0;
    }

    HRESULT Error = S_OK;
    Error = CoInitialize(NULL);     //初始化COM库

    if ( FAILED(Error) )
    {
        cout << "初始化COM库失败!" <<endl;
        goto exit;
    }
    ICalculator* pCalc = NULL;

    Error = CoCreateInstance(
                          CLSID_Calculator, 
                          NULL, 
                          CLSCTX_INPROC_SERVER, 
                          IID_ICalculator, 
                          reinterpret_cast<void**>(&pCalc)
                          );

    if ( FAILED(Error) )
    {
        cout << "创建组件失败!" <<endl;
        goto exit;
    }


    char* strExpression = NULL;         
    strExpression = argv[1];            //保存表达式的值

    //开始处理表达式,调用接口ICalculator进行计算
    while (*strExpression != '\0')       
    {
        switch ( *strExpression )
        {
            case '0':
                Error = pCalc->PutKey(LWK_0);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '1':
                Error = pCalc->PutKey(LWK_1);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '2':
                Error = pCalc->PutKey(LWK_2);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '3':
                Error = pCalc->PutKey(LWK_3);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '4':
                Error = pCalc->PutKey(LWK_4);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '5':
                Error = pCalc->PutKey(LWK_5);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '6':
                Error = pCalc->PutKey(LWK_6);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '7':
                Error = pCalc->PutKey(LWK_7);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '8':
                Error = pCalc->PutKey(LWK_8);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '9':
                Error = pCalc->PutKey(LWK_9);

                if (FAILED(Error))
                {
                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '+':
                Error = pCalc->PutKey(LWK_ADD);

                if (FAILED(Error))
                {
                    if ( Error == DIV_ZERO )
                    {
                        cout << "除数不能为零!" << endl;
                        goto exit;
                    }

                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '-':
                Error = pCalc->PutKey(LWK_SUB);

                if (FAILED(Error))
                {
                    if ( Error == DIV_ZERO )
                    {
                        cout << "除数不能为零!" << endl;
                        goto exit;
                    }

                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '*':
                Error = pCalc->PutKey(LWK_MUL);

                if (FAILED(Error))
                {
                    if ( Error == DIV_ZERO )
                    {
                        cout << "除数不能为零!" << endl;
                        goto exit;
                    }

                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '/':
                Error = pCalc->PutKey(LWK_DIV);

                if (FAILED(Error))
                {
                    if ( Error == DIV_ZERO )
                    {
                        cout << "除数不能为零!" << endl;
                        goto exit;
                    }

                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '=':
                Error = pCalc->PutKey(LWK_EQU);

                if (FAILED(Error))
                {
                    if ( Error == DIV_ZERO )
                    {
                        cout << "除数不能为零!" << endl;
                        goto exit;
                    }

                    cout << "数据越界,范围-65536至65535" << endl;
                    goto exit;
                }

                break;

            case '!':
                pCalc->PutKey(LWK_REV);

                break;

            case 'C':
            case 'c':
                pCalc->PutKey(LWK_C);
                
                break;

            case 'E':
            case 'e':
                pCalc->PutKey(LWK_CE);

                break;

            case 'D':
            case 'd':
                pCalc->PutKey(LWK_D);

                break;

            default:
                cout << "输入有非法字符!" << endl;
                
                goto exit;
        }

        strExpression++;

    }
    long lResult = 0;
    pCalc->QueryResult(&lResult);                           //获取计算结果

    pCalc->Release();

    cout << argv[1] 
         << lResult
         << "\n按任意键结束";

exit:
    CoUninitialize();
    getchar();
    return 0;
}