HELLO.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #ifdef WIN32
  2. #ifdef UNICODE
  3.     #define FROM_OLE_STRING(str) str
  4.     #define TO_OLE_STRING(str) str 
  5. #else
  6.     #define FROM_OLE_STRING(str) ConvertToAnsi(str)
  7.     char* ConvertToAnsi(OLECHAR FAR* szW);  
  8.     #define TO_OLE_STRING(str) ConvertToUnicode(str)
  9.     OLECHAR* ConvertToUnicode(char FAR* szA);   
  10.     // Maximum length of string that can be converted between Ansi & Unicode
  11.     #define STRCONVERT_MAXLEN 300         
  12. #endif
  13. #else  // WIN16
  14.   #define APIENTRY far pascal  
  15.   #define TCHAR char
  16.   #define TEXT(sz) sz 
  17.   #define FROM_OLE_STRING(str) str  
  18.   #define TO_OLE_STRING(str) str  
  19.   #define LPTSTR LPSTR
  20.   
  21.   // Windows NT defines the following in windowsx.h
  22.   #define GET_WM_COMMAND_ID(w,l) (w)
  23.   #define GET_WM_COMMAND_CMD(w,l) HIWORD(l)
  24.   #define GET_WM_COMMAND_HWND(w,l) LOWORD(l)
  25. #endif
  26. #undef STRICT
  27. #define STRICT
  28. // Resource IDs
  29. #define IDD_MAINWINDOW   101 
  30. #define IDI_ICON         102
  31. // Child window IDs
  32. #define IDC_HELLODISPLAY 101  
  33. #define IDC_SAYHELLO     102
  34. // MAX len of string table entries
  35. #define STR_LEN   100
  36. // String table constants
  37. #define IDS_Name                 1  
  38. #define IDS_HelloMessage         2     
  39. #define IDS_ErrorLoadingTypeLib  3
  40. #define IDS_SayHello             4
  41. #define IDS_ProgID               5
  42. #define IDS_Unexpected           1001
  43. // SCODEs for the Hello Application. This is required for vtable-binding
  44. // Automation objects want to return custom HRESULTs. All the OLE-defined 
  45. // FACILITY_ITF codes have a code value which lies in the region 0x0000-0x01FFF.
  46. // While it is legal for the definer to use any code, it is highly recommended
  47. // that only code values in the range 0x0200-0xFFFF be used, as this will reduce the
  48. // possiblity of accidental confusion with any OLE-defined errors.
  49. #define HELLO_E_FIRST       MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200)  
  50. #define HELLO_E_UNEXPECTED  (HELLO_E_FIRST + 0x0) 
  51. // Unexpected error   
  52. // Number of SCODEs
  53. #define SCODE_COUNT 1 
  54. // Function prototypes
  55. int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
  56. BOOL InitApplication (HINSTANCE);
  57. BOOL InitInstance (HINSTANCE);
  58. BOOL ProcessCmdLine(LPSTR lpCmdLine, LPDWORD pdwRegisterCF, LPDWORD pdwRegisterActiveObject, int nCmdShow);
  59. void Uninitialize(DWORD dwRegisterCF, DWORD dwRegisterActiveObject);                 
  60. HRESULT LoadTypeInfo(ITypeInfo FAR* FAR* pptinfo, REFCLSID clsid);
  61. HRESULT RaiseException(int nID, REFGUID rguid);
  62. #ifdef WIN16
  63. extern "C" LRESULT __export CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);  
  64. #else 
  65. extern "C" LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);  
  66. #endif 
  67. #include "tlb.h"
  68. // ISupportErrorInfo interface implementation
  69. interface CSupportErrorInfo : public ISupportErrorInfo 
  70. {
  71. public:
  72.     // IUnknown methods 
  73.     STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);
  74.     STDMETHOD_(ULONG, AddRef)(void);
  75.     STDMETHOD_(ULONG, Release)(void); 
  76.     
  77.     // ISupportErrorInfo method
  78.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);  
  79.      
  80.     CSupportErrorInfo(IUnknown FAR* punkObject, REFIID riid); 
  81. private:
  82.     LPUNKNOWN m_punkObject;  // IUnknown of Object that implements this interface 
  83.     GUID m_iid;
  84. };     
  85. class FAR CHello : public IHello
  86. {
  87. public:
  88.     // IUnknown methods 
  89.     STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);
  90.     STDMETHOD_(ULONG, AddRef)(void);
  91.     STDMETHOD_(ULONG, Release)(void);
  92.     
  93.     // IDispatch methods 
  94.     STDMETHOD(GetTypeInfoCount)(UINT FAR* pctinfo);
  95.     STDMETHOD(GetTypeInfo)(
  96.       UINT itinfo,
  97.       LCID lcid,
  98.       ITypeInfo FAR* FAR* pptinfo);
  99.     STDMETHOD(GetIDsOfNames)(
  100.       REFIID riid,
  101.       OLECHAR FAR* FAR* rgszNames,
  102.       UINT cNames,
  103.       LCID lcid,
  104.       DISPID FAR* rgdispid);
  105.     STDMETHOD(Invoke)(
  106.       DISPID dispidMember,
  107.       REFIID riid,
  108.       LCID lcid,
  109.       WORD wFlags,
  110.       DISPPARAMS FAR* pdispparams,
  111.       VARIANT FAR* pvarResult,
  112.       EXCEPINFO FAR* pexcepinfo,
  113.       UINT FAR* puArgErr);
  114.     
  115.     // IHello methods   
  116.     STDMETHOD(get_Application)(IHello FAR* FAR* ppHello);
  117.     STDMETHOD(get_FullName)(BSTR FAR* pbstr);
  118.     STDMETHOD(get_Name)(BSTR FAR* pbstr);
  119.     STDMETHOD(get_Parent)(IHello FAR* FAR* ppHello);
  120.     STDMETHOD(put_Visible)(VARIANT_BOOL bVisible);
  121.     STDMETHOD(get_Visible)(VARIANT_BOOL FAR* pbool);
  122.     STDMETHOD(Quit)();
  123.     STDMETHOD(put_HelloMessage)(BSTR bstrMessage);
  124.     STDMETHOD(get_HelloMessage)(BSTR FAR* pbstrMessage);
  125.     STDMETHOD(SayHello)();  
  126.     
  127.     // CHello methods   
  128.     STDMETHOD_(void, ShowWindow)(int nCmdShow);
  129.     static HRESULT Create(HINSTANCE hinst, LPTSTR lpszHelloMessage, CHello FAR* FAR* pphello); // Creates and intializes Hello object    
  130.     CHello();
  131.     ~CHello();
  132. public:
  133.     HWND m_hwnd;                   // Application window.     
  134.     HINSTANCE m_hinst;             // Hinstance of application. 
  135.     BSTR m_bstrName;               // Name of application.
  136.     BSTR m_bstrProgID;             // ProgID of application.
  137.      
  138. private:
  139.     LPTYPEINFO m_ptinfo;           // Type information of Hello application interface.
  140.     BSTR m_bstrHelloMsg;           // Hello message
  141.     BSTR m_bstrFullName;           // Full name of application.
  142.     BOOL m_bVisible;               // Is window visible?
  143.     ULONG m_cRef;                  // Reference count   
  144.     CSupportErrorInfo m_SupportErrorInfo; // ISupportErrorInfo interface implementation 
  145. };
  146. class FAR CHelloCF : public IClassFactory
  147. {
  148. public:
  149.     // IUnknown methods 
  150.     STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);
  151.     STDMETHOD_(ULONG, AddRef)(void);
  152.     STDMETHOD_(ULONG, Release)(void); 
  153.     
  154.     // IClassFactory methods
  155.     STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter, REFIID riid, 
  156.                               void FAR* FAR* ppv);
  157.     STDMETHOD(LockServer)(BOOL fLock);    
  158.     
  159.     CHelloCF();
  160.     
  161. private:
  162.     ULONG m_cRef;                   // Reference count
  163. };
  164. extern CHello FAR* g_phello;     
  165.      
  166.