刚才在一个贴子里看到有人建议用C来模拟COM实现,于是我尝试了下,
主要就是用C模拟C++虚表实现, 可能有些地方理解不对, 欢迎大家指正
C/C++ code:
#include <windows.h>
#include <tchar.h>
#include <crtdbg.h>
#ifndef __IID_DEFINED__
#define __IID_DEFINED__
typedef struct _IID
{
unsigned long x;
unsigned short s1;
unsigned short s2;
unsigned char c[8];
} IID;
typedef IID CLSID;
#endif // __IID_DEFINED__
const IID IID_IMath = {0xF4F2BDCD,0x3990,0x4279,{0x86,0xFE,0x08,0xB0,0x95,0x9B,0xAC,0x87}};
const IID IID_IMathTimes = {0x461E5585,0xD9FD,0x417A,{0x8D,0xCA,0xD7,0x0B,0xC9,0x85,0x51,0xF1}};
const CLSID CLSID_Math = {0x9AA80A7D,0xBA05,0x40C8,{0x94,0x28,0xEF,0xD6,0x58,0x3B,0xA8,0x2D}};
typedef HRESULT (WINAPI *QueryInterfaceProc)(VOID* pThis, REFIID iid, void ** ppvObject);
typedef ULONG (WINAPI *AddRefProc)(VOID* pThis);
typedef ULONG (WINAPI *ReleaseProc)(VOID* pThis);
typedef HRESULT (WINAPI *AddProc)(VOID* pThis, int a, int b, int* nRet);
typedef HRESULT (WINAPI *GetAddTimesProc)(VOID* pThis, int* nRet); //get call times for Add function
struct IUnkown
{
QueryInterfaceProc f_QueryInterface;
AddRefProc f_AddRef;
ReleaseProc f_Release;
};
struct IMath
{
//IUnkown
QueryInterfaceProc f_QueryInterface;
AddRefProc f_AddRef;
ReleaseProc f_Release;
公司开发一个触摸屏程序,我负责的一块,实现这样一个功能,当鼠标点击窗口中图片(一张图分成几部分)的其中一部分时,将这部分图片截取出来,弹出新的窗口,将截取出的图片显示出来。我使用Rectange类控制了返回, ......