WriteIP.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 <io.h>
  7. #include <sys/stat.h>
  8. #include "Componentcomponent.h"
  9. HRESULT IPToHexString(REFIID riid, IUnknown* pObject, char** output)
  10. {
  11. HRESULT hr;
  12. IStream* pStream = 0;
  13. hr = CreateStreamOnHGlobal(0, TRUE, &pStream);
  14. hr = CoMarshalInterface(pStream, riid, pObject, MSHCTX_DIFFERENTMACHINE, 0, MSHLFLAGS_NORMAL);
  15. ULONG size;
  16. hr = CoGetMarshalSizeMax(&size, riid, pObject, MSHCTX_DIFFERENTMACHINE, 0, MSHLFLAGS_NORMAL);
  17. HGLOBAL hg;
  18. hr = GetHGlobalFromStream(pStream, &hg);
  19. unsigned char* buffer = (unsigned char*)GlobalLock(hg);
  20. *output = (char*)CoTaskMemAlloc((size * 2) + 1);
  21. char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  22. for(ULONG count = 0; count < size; count++)
  23. {
  24. (*output)[count*2] = hex[buffer[count] / 16];
  25. (*output)[(count*2)+1] = hex[buffer[count] - (buffer[count] / 16) * 16];
  26. }
  27. (*output)[((count-1)*2)+2] = 0;
  28. GlobalUnlock(hg);
  29. pStream->Release();
  30. return hr;
  31. }
  32. void main()
  33. {
  34. CoInitializeEx(NULL, COINIT_MULTITHREADED);
  35. HRESULT hr;
  36. ISum* pSum;
  37. hr = CoCreateInstance(CLSID_InsideCOM, NULL, CLSCTX_INPROC_SERVER, IID_ISum, (void**)&pSum);
  38. char* output;
  39. IPToHexString(IID_ISum, pSum, &output);
  40. int fh = _creat("c:\ip.txt", _S_IWRITE);
  41. _write(fh, output, strlen(output));
  42. _close(fh);
  43. printf("%sn", output);
  44. CoTaskMemFree(output);
  45. int addition;
  46. pSum->Sum(23, 32, &addition);
  47. cout << "23 + 32 = " << addition << endl;
  48. _getch();
  49. pSum->Release();
  50. CoUninitialize();
  51. }