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

Windows编程

开发平台:

Visual C++

  1. /* Bug in MIDL: Comment out the three references to _maxcount_test in the component_p.c file */
  2. // client.cpp
  3. #define _WIN32_DCOM
  4. #include <iostream.h>
  5. #include <stdio.h>
  6. #include "Componentcomponent.h"
  7. void main()
  8. {
  9. CoInitialize(NULL);
  10. ITest* pTest;
  11. CoCreateInstance(CLSID_TestIDL, NULL, CLSCTX_LOCAL_SERVER, IID_ITest, (void**)&pTest);
  12. // HRESULT SquareInteger([in] int myInteger, [out] int* square);
  13. int square;
  14. pTest->SquareInteger(6, &square);
  15. cout << "SquareInteger: 6^2 = " << square << endl;
  16. // HRESULT SumOfIntegers1([in] int myIntegers[5], [out] int* sum);
  17. int total1;
  18. int integers[5] = { 1, 2, 3, 4, 5 };
  19. pTest->SumOfIntegers1(integers, &total1);
  20. cout << "SumOfIntegers1: 1 + 2 + 3 + 4 + 5 = " << total1 << endl;
  21. // HRESULT SumOfIntegers2([in] int cMax, [in, size_is(cMax)] int* myIntegers, [out] int* sum);
  22. int total2;
  23. pTest->SumOfIntegers2(5, integers, &total2);
  24. cout << "SumOfIntegers2: 1 + 2 + 3 + 4 + 5 = " << total2 << endl;
  25. /* typedef struct tagSUM_STRUCT
  26. {
  27. int cMax;
  28. [size_is(cMax)] int* myIntegers;
  29. } SUM_STRUCT; */
  30. // HRESULT SumOfIntegers3([in] SUM_STRUCT* myIntegers, [out] int* sum);
  31. int total3;
  32. SUM_STRUCT mystruct;
  33. mystruct.cMax = 5;
  34. mystruct.myIntegers = integers;
  35. pTest->SumOfIntegers3(&mystruct, &total3);
  36. cout << "SumOfIntegers3: 1 + 2 + 3 + 4 + 5 = " << total3 << endl;
  37. // HRESULT SumOfIntegers4([in] int cFirst, [in] int cActual, [in, first_is(cFirst), length_is(cActual)] int* myIntegers[7], [out] int* sum);
  38. int sum = 0;
  39. int someInts[7];
  40. someInts[3] = 4; someInts[4] = 5; someInts[5] = 6;
  41. HRESULT hr = pTest->SumOfIntegers4(4, 3, (int**)someInts, &sum);
  42. cout << "SumOfIntegers4: 4 + 5 + 6 = " << sum << endl;
  43. printf("hr = %0xn", hr);
  44. // HRESULT ProduceIntegers1([in] int cMax, [out, size_is(cMax)] int* myIntegers);
  45. int array[5];
  46. pTest->ProduceIntegers1(5, array);
  47. for(int i = 0; i < 5; i++)
  48. cout << "ProduceIntegers1: " << array[i] << endl;
  49. // HRESULT ProduceIntegers2([out] int* pcActual, [out, length_is(*pcActual)] int myIntegers[4096]);
  50. int how_many_did_we_get = 0;
  51. int myIntegers[4096];
  52. pTest->ProduceIntegers2(&how_many_did_we_get, myIntegers);
  53. cout << "ProduceIntegers2: " << how_many_did_we_get << " integers returned" << endl;
  54. // HRESULT SendReceiveIntegers([in, out] int* pcActual, [in, out, length_is(*pcActual)] int myIntegers[4096]);
  55. int num_integers = 5;
  56. int some_ints[4096] = { 0, 1, 2, 3, 4 };
  57. pTest->SendReceiveIntegers(&num_integers, some_ints);
  58. cout << "SendReceiveIntegers: " << num_integers << " integers returned" << endl;
  59. // HRESULT ProduceIntegers3([in] int cMax, [out] int* pcActual, [out, size_is(cMax), length_is(*pcActual)] int* myIntegers);
  60. how_many_did_we_get = 0;
  61. int more_ints[6];
  62. pTest->ProduceIntegers3(6, &how_many_did_we_get, more_ints);
  63. cout << "ProduceIntegers3: " << how_many_did_we_get << " integers returned" << endl;
  64. // HRESULT SendString1([in] int cLength, [in, size_is(cLength)] wchar_t* myString);
  65. wchar_t wszHello1[] = L"Hello COM";
  66. pTest->SendString1(wcslen(wszHello1), wszHello1);
  67. // HRESULT SendString2([in, string] wchar_t* myString);
  68. wchar_t wszHello2[] = L"Hello COM";
  69. pTest->SendString2(wszHello2);
  70. // HRESULT SendReceiveString1([in, out, string] wchar_t* myString);
  71. wchar_t wszHello[256] = L"Hello COM";
  72. pTest->SendReceiveString1(wszHello);
  73. wprintf(L"SendReceiveString1: %sn", wszHello);
  74. // HRESULT SendReceiveString2([in] int cMax, [in, out, string, size_is(cMax)] wchar_t* myString);
  75. wchar_t wszAString[256] = L"Hello COM";
  76. pTest->SendReceiveString2(256, wszAString);
  77. wprintf(L"Received string: %sn", wszAString);
  78. // HRESULT SendReceiveString3([in, out, string] wchar_t** myString);
  79. wchar_t* wszHello3 = L"Hello COM";
  80. wchar_t* myString = (wchar_t*)CoTaskMemAlloc((wcslen(wszHello3)+1)*sizeof(wchar_t));
  81. wcscpy(myString, wszHello3);
  82. pTest->SendReceiveString3(&myString);
  83. wprintf(L"SendReceiveString3: %sn", myString);
  84. CoTaskMemFree(myString);
  85. // HRESULT SendInteger([in] int** test);
  86. int an_int = 7;
  87. int *pint1 = &an_int;
  88. pTest->SendInteger(&pint1);
  89. // HRESULT SendIntegers1([in, size_is(, 2)] int** test);
  90. int test1[2] = { 10, 20 };
  91. int* pint2 = (int*)&test1;
  92. pTest->SendIntegers1(&pint2);
  93. // HRESULT SendIntegers2([in, size_is(3, )] int** test);
  94. int* test2[3];
  95. int a1 = 3, a2 = 7, a3 = 9;
  96. test2[0] = &a1;
  97. test2[1] = &a2;
  98. test2[2] = &a3;
  99. pTest->SendIntegers2(test2);
  100. // HRESULT SendIntegers3([in, size_is(3, 2)] int** test);
  101. int testA[2] = { 1, 2 };
  102. int testB[2] = { 3, 4 };
  103. int testC[2] = { 5, 6 };
  104. int* test3[3];
  105. test3[0] = testA;
  106. test3[1] = testB;
  107. test3[2] = testC;
  108. pTest->SendIntegers3(test3);
  109. pTest->Release();
  110. CoUninitialize();
  111. }