-- 作者:卷积内核
-- 发布时间:7/9/2009 11:08:00 AM
-- C#将VC++ DLL文件的再封装成新的DLL文件
关键点: 1、设置MFC链接库。Project\Setting\General\Using MFC in a shared Dll 2、加载已有的动态链接库文件 *.LIB文件。 3、在头文件中加入 #ifdef IFR_API #else #define IFR_API __declspec(dllimport) __stdcall #endif 在.cpp文件中加入一下代码: #define IFR_API __declspec(dllexport) __stdcall 例程: 如果封装IDirectDrawSurface成为结构体非常麻烦,封装为新的dll文件可节省很多时间和精力。 typedef struct IDirectDrawSurface FAR *LPDIRECTDRAWSURFACE; int IFR_API IFR_GetDrawBuffer1(HANDLE hHandle, void *pIfr) { LPDIRECTDRAWSURFACE lp; return IFR_GetDrawBuffer(hHandle, pIfr, &lp); }; DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPVOID) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE; };
|