终于看到一篇关于在win32里实现COM的文章了,文章很长,写的很好。
http://www.codeproject.com/Articles/13601/COM-in-plain-C#DLL
http://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla
1) 要实现的功能
typedef long SetStringPtr(char *);
typedef long GetStringPtr(char *, long);typedef struct {
SetStringPtr * SetString;
GetStringPtr * GetString;
DWORD count;
char buffer[80];
}IExample;
long SetString(char * str)
{
return(0);
}
long GetString(char *buffer, long length)
{
return(0);
}
2)需要将其改为下列的形式
typedef HRESULT STDMETHODCALLTYPE QueryInterfacePtr(IExample *, REFIID, void **);
typedef ULONG STDMETHODCALLTYPE AddRefPtr(IExample *);
typedef ULONG STDMETHODCALLTYPE ReleasePtr(IExample *);
typedef HRESULT STDMETHODCALLTYPE SetStringPtr(IExample *, char *);
typedef HRESULT STDMETHODCALLTYPE GetStringPtr(IExample *, char *, long);
typedef struct {
QueryInterfacePtr *QueryInterface;
AddRefPtr *AddRef;
ReleasePtr *Release;
SetStringPtr *SetString;
GetStringPtr *GetString;
} IExampleVtbl;
typedef struct {
IExampleVtbl *lpVtbl;
DWORD count;
char buffer[80];
} IExample
说明:But all COM objects begin with a pointer to their VTable, and the first t