client.cpp
上传用户:bjlvip
上传日期:2010-02-08
资源大小:744k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #define _WIN32_DCOM
  2. #include <windows.h>
  3. #include <iostream.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include "componentcomponent.h"
  7. void main()
  8. {
  9.     HRESULT hr;
  10. hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  11.     if(FAILED(hr))
  12.         cout << "CoInitializeEx failed. " << endl;
  13. IPrime* pPrime = 0;
  14. hr = CoCreateInstance(CLSID_InsideCOM, 0, CLSCTX_LOCAL_SERVER, IID_IPrime, (void**)&pPrime);
  15. if(FAILED(hr))
  16.     cout << "CoCreateInstance FAILED" << endl;
  17. ICallFactory* pCallFactory = 0;
  18. hr = pPrime->QueryInterface(IID_ICallFactory, (void**)&pCallFactory);
  19. if(FAILED(hr))
  20.     cout << "QueryInterface for ICallFactory FAILED" << endl;
  21. cout << "Release " << pPrime->Release() << endl;
  22. AsyncIPrime* pAsyncPrime = 0;
  23. hr = pCallFactory->CreateCall(IID_AsyncIPrime, 0, IID_AsyncIPrime, (IUnknown**)&pAsyncPrime);
  24. if(FAILED(hr)) 
  25.     cout << "CreateCall FAILED" << endl;
  26.   cout << "Release " << pCallFactory->Release() << endl;
  27. ISynchronize* pSynchronize = 0;
  28. hr = pAsyncPrime->QueryInterface(IID_ISynchronize, (void**)&pSynchronize);
  29. if(FAILED(hr))
  30.     cout << "QueryInterface for AsyncIPrime FAILED" << endl;
  31. int cancel = 0;
  32. for(int testnumber = 1000000; testnumber < 1001000; testnumber++)
  33. {
  34. int result = 0;
  35. hr = pAsyncPrime->Begin_IsPrime(testnumber);
  36. if(FAILED(hr))
  37.     printf("Begin_IsPrime FAILED hr = %0xn", hr);
  38. if(++cancel > 33)
  39. {
  40. // hr = CoCancelCall(0, 0);
  41. // if(FAILED(hr))
  42. // printf("CoCancelCall FAILED %0xn", hr);
  43. ICancelMethodCalls* pCancelMethodCalls = 0;
  44. hr = pSynchronize->QueryInterface(IID_ICancelMethodCalls, (void**)&pCancelMethodCalls);
  45. if(SUCCEEDED(hr))
  46. {
  47. hr = pCancelMethodCalls->Cancel(0);
  48. if(hr == RPC_E_CALL_COMPLETE)
  49. cout << endl << "The call finished executing before it was cancelled." << endl;
  50. if(hr == S_OK)
  51. cout << "The cancel request was submitted." << endl;
  52. cout << "Release " << pCancelMethodCalls->Release() << endl;
  53. }
  54. cancel = 0;
  55. }
  56. while(pSynchronize->Wait(0, 50) == RPC_S_CALLPENDING)
  57. cout << "Waiting ";
  58. //
  59. // 0x8007071A should be RPC_E_CALL_CANCELLED
  60. //
  61. hr = pAsyncPrime->Finish_IsPrime(&result);
  62. if(hr == 0x8007071A)
  63. cout << "The call was cancelled " << testnumber << endl;
  64. else
  65. if(result)
  66. cout << endl << testnumber << " is prime." << endl;
  67. }
  68. cout << "Release " << pSynchronize->Release() << endl;
  69. cout << "Release " << pAsyncPrime->Release() << endl;
  70.     CoUninitialize();
  71. }