diff --git a/dll/win32/riched20/CMakeLists.txt b/dll/win32/riched20/CMakeLists.txt index 6120008cf66..2d107ab129d 100644 --- a/dll/win32/riched20/CMakeLists.txt +++ b/dll/win32/riched20/CMakeLists.txt @@ -30,14 +30,15 @@ list(APPEND SOURCE version.rc ${CMAKE_CURRENT_BINARY_DIR}/riched20.def) +if(MSVC) + list(APPEND SOURCE msvc-thiscall.c) + set_source_files_properties(txthost.c txtsrv.c PROPERTIES COMPILE_FLAGS "/FImsvc.h") +endif() + add_library(riched20 SHARED ${SOURCE}) set_module_type(riched20 win32dll) target_link_libraries(riched20 wine uuid) -if(MSVC) - set_target_properties(riched20 PROPERTIES COMPILE_FLAGS "/FIwine/typeof.h") -endif(MSVC) - add_importlibs(riched20 msvcrt ole32 diff --git a/dll/win32/riched20/msvc-thiscall.c b/dll/win32/riched20/msvc-thiscall.c new file mode 100644 index 00000000000..9442e0f339f --- /dev/null +++ b/dll/win32/riched20/msvc-thiscall.c @@ -0,0 +1,124 @@ +#include "config.h" +#include "editor.h" + +#define DEFINE_THISCALL_WRAPPER(func,args) \ + typedef struct {int x[args/4];} _tag_##func; \ + void __stdcall func(_tag_##func p1); \ + __declspec(naked) void __stdcall __thiscall_##func(_tag_##func p1) \ + { \ + __asm pop eax \ + __asm push ecx \ + __asm push eax \ + __asm jmp func \ + } + +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC,4) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxEnableScrollBar,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollRange,20) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollPos,16) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxInvalidateRect,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxViewChange,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxCreateCaret,16) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowCaret,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCaretPos,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetTimer,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxKillTimer,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScrollWindowEx,32) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCapture,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetFocus,4) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCursor,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScreenToClient,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxClientToScreen,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxActivate,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxDeactivate,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetClientRect,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetViewInset,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetCharFormat,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetParaFormat,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSysColor,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetBackStyle,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetMaxLength,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetScrollBars,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPasswordChar,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetAcceleratorPos,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetExtent,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxCharFormatChange,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxParaFormatChange,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPropertyBits,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxNotify,12) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmGetContext,4) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmReleaseContext,8) +DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSelectionBarWidth,8) + +#define STDCALL(func) __stdcall_ ## func +#define DEFINE_STDCALL_WRAPPER(num,func,args) \ + __declspec(naked) void __stdcall __stdcall_##func(_tag_##func p1) \ + { \ + __asm pop eax \ + __asm pop eax \ + __asm pop ecx \ + __asm push eax \ + __asm mov eax, [ecx] \ + __asm jmp dword ptr [eax + 4*num] \ + } + +DEFINE_STDCALL_WRAPPER(3,ITextHostImpl_TxGetDC,4) +DEFINE_STDCALL_WRAPPER(4,ITextHostImpl_TxReleaseDC,8) +DEFINE_STDCALL_WRAPPER(5,ITextHostImpl_TxShowScrollBar,12) +DEFINE_STDCALL_WRAPPER(6,ITextHostImpl_TxEnableScrollBar,12) +DEFINE_STDCALL_WRAPPER(7,ITextHostImpl_TxSetScrollRange,20) +DEFINE_STDCALL_WRAPPER(8,ITextHostImpl_TxSetScrollPos,16) +DEFINE_STDCALL_WRAPPER(9,ITextHostImpl_TxInvalidateRect,12) +DEFINE_STDCALL_WRAPPER(10,ITextHostImpl_TxViewChange,8) +DEFINE_STDCALL_WRAPPER(11,ITextHostImpl_TxCreateCaret,16) +DEFINE_STDCALL_WRAPPER(12,ITextHostImpl_TxShowCaret,8) +DEFINE_STDCALL_WRAPPER(13,ITextHostImpl_TxSetCaretPos,12) +DEFINE_STDCALL_WRAPPER(14,ITextHostImpl_TxSetTimer,12) +DEFINE_STDCALL_WRAPPER(15,ITextHostImpl_TxKillTimer,8) +DEFINE_STDCALL_WRAPPER(16,ITextHostImpl_TxScrollWindowEx,32) +DEFINE_STDCALL_WRAPPER(17,ITextHostImpl_TxSetCapture,8) +DEFINE_STDCALL_WRAPPER(18,ITextHostImpl_TxSetFocus,4) +DEFINE_STDCALL_WRAPPER(19,ITextHostImpl_TxSetCursor,12) +DEFINE_STDCALL_WRAPPER(20,ITextHostImpl_TxScreenToClient,8) +DEFINE_STDCALL_WRAPPER(21,ITextHostImpl_TxClientToScreen,8) +DEFINE_STDCALL_WRAPPER(22,ITextHostImpl_TxActivate,8) +DEFINE_STDCALL_WRAPPER(23,ITextHostImpl_TxDeactivate,8) +DEFINE_STDCALL_WRAPPER(24,ITextHostImpl_TxGetClientRect,8) +DEFINE_STDCALL_WRAPPER(25,ITextHostImpl_TxGetViewInset,8) +DEFINE_STDCALL_WRAPPER(26,ITextHostImpl_TxGetCharFormat,8) +DEFINE_STDCALL_WRAPPER(27,ITextHostImpl_TxGetParaFormat,8) +DEFINE_STDCALL_WRAPPER(28,ITextHostImpl_TxGetSysColor,8) +DEFINE_STDCALL_WRAPPER(29,ITextHostImpl_TxGetBackStyle,8) +DEFINE_STDCALL_WRAPPER(30,ITextHostImpl_TxGetMaxLength,8) +DEFINE_STDCALL_WRAPPER(31,ITextHostImpl_TxGetScrollBars,8) +DEFINE_STDCALL_WRAPPER(32,ITextHostImpl_TxGetPasswordChar,8) +DEFINE_STDCALL_WRAPPER(33,ITextHostImpl_TxGetAcceleratorPos,8) +DEFINE_STDCALL_WRAPPER(34,ITextHostImpl_TxGetExtent,8) +DEFINE_STDCALL_WRAPPER(35,ITextHostImpl_OnTxCharFormatChange,8) +DEFINE_STDCALL_WRAPPER(36,ITextHostImpl_OnTxParaFormatChange,8) +DEFINE_STDCALL_WRAPPER(37,ITextHostImpl_TxGetPropertyBits,12) +DEFINE_STDCALL_WRAPPER(38,ITextHostImpl_TxNotify,12) +DEFINE_STDCALL_WRAPPER(39,ITextHostImpl_TxImmGetContext,4) +DEFINE_STDCALL_WRAPPER(40,ITextHostImpl_TxImmReleaseContext,8) +DEFINE_STDCALL_WRAPPER(41,ITextHostImpl_TxGetSelectionBarWidth,8) + +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxSendMessage,20) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxDraw,52) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetHScroll,24) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetVScroll,24) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxSetCursor,40) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxQueryHitPoint,44) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxInplaceActivate,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxInplaceDeactivate,4) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxUIActivate,4) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxUIDeactivate,4) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetText,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxSetText,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetCurrentTargetX,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetBaseLinePos,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetNaturalSize,36) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetDropTarget,8) +DEFINE_THISCALL_WRAPPER(fnTextSrv_OnTxPropertyBitsChange,12) +DEFINE_THISCALL_WRAPPER(fnTextSrv_TxGetCachedSize,12) diff --git a/dll/win32/riched20/msvc.h b/dll/win32/riched20/msvc.h new file mode 100644 index 00000000000..251a7cea54d --- /dev/null +++ b/dll/win32/riched20/msvc.h @@ -0,0 +1,138 @@ + + +#define __ASM_STDCALL_FUNC(name,args,code) + +#define typeof(X_) __typeof_ ## X_ + +struct ITextHost; +struct _RECT; +struct _CHARFORMATW; +struct _PARAFORMAT; +struct _POINT; +struct _SIZEL; +struct HDC__; + +#define WINAPI __stdcall +#define HRESULT int +#define HDC struct HDC__* +#define BOOL int +#define HIMC void* +#define ITextHost struct ITextHost +#define INT int +#define UINT unsigned int +#define HBITMAP void* +#define LPCRECT const struct tagRECT * +#define LPRECT struct tagRECT * +#define LPCRECTL const struct _RECTL* +#define CHARFORMATW struct _charformatw +#define PARAFORMAT struct _paraformat +#define DWORD unsigned int /* HACK */ +#define COLORREF DWORD +#define LONG int /* HACK */ +#define WPARAM unsigned long +#define LPARAM long +#define HRGN void* +#define HCURSOR void* +#define LPPOINT struct tagPOINT* +#define TXTBACKSTYLE enum _TXTBACKSTYLE +#define WCHAR unsigned short +#define BSTR WCHAR* +#define LPCWSTR const WCHAR * +#define SIZEL struct tagSIZE +#define LPSIZEL struct tagSIZE* +#define ITextServices struct ITextServices +#define LRESULT long +#define DVTARGETDEVICE struct tagDVTARGETDEVICE + +typedef HDC (WINAPI typeof(ITextHostImpl_TxGetDC))(ITextHost * iface); +typedef int (WINAPI typeof(ITextHostImpl_TxReleaseDC))(ITextHost *iface,HDC hdc); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxShowScrollBar))(ITextHost *iface,INT fnBar,BOOL fShow); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxEnableScrollBar))(ITextHost *iface,INT fuSBFlags,INT fuArrowflags); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxSetScrollRange))(ITextHost *iface,INT fnBar,LONG nMinPos,INT nMaxPos,BOOL fRedraw); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxSetScrollPos))(ITextHost *iface,INT fnBar,INT nPos,BOOL fRedraw); +typedef void (WINAPI typeof(ITextHostImpl_TxInvalidateRect))(ITextHost *iface,LPCRECT prc,BOOL fMode); +typedef void (WINAPI typeof(ITextHostImpl_TxViewChange))(ITextHost *iface,BOOL fUpdate); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxCreateCaret))(ITextHost *iface,HBITMAP hbmp,INT xWidth, INT yHeight); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxShowCaret))(ITextHost *iface, BOOL fShow); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxSetCaretPos))(ITextHost *iface,INT x, INT y); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxSetTimer))(ITextHost *iface,UINT idTimer, UINT uTimeout); +typedef void (WINAPI typeof(ITextHostImpl_TxKillTimer))(ITextHost *iface,UINT idTimer); +typedef void (WINAPI typeof(ITextHostImpl_TxScrollWindowEx))(ITextHost *iface,INT dx, INT dy,LPCRECT lprcScroll,LPCRECT lprcClip,HRGN hRgnUpdate,LPRECT lprcUpdate,UINT fuScroll); +typedef void (WINAPI typeof(ITextHostImpl_TxSetCapture))(ITextHost *iface,BOOL fCapture); +typedef void (WINAPI typeof(ITextHostImpl_TxSetFocus))(ITextHost *iface); +typedef void (WINAPI typeof(ITextHostImpl_TxSetCursor))(ITextHost *iface,HCURSOR hcur,BOOL fText); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxScreenToClient))(ITextHost *iface,LPPOINT lppt); +typedef BOOL (WINAPI typeof(ITextHostImpl_TxClientToScreen))(ITextHost *iface,LPPOINT lppt); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxActivate))(ITextHost *iface,LONG *plOldState); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxDeactivate))(ITextHost *iface,LONG lNewState); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetClientRect))(ITextHost *iface,LPRECT prc); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetViewInset))(ITextHost *iface,LPRECT prc); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetCharFormat))(ITextHost *iface,const CHARFORMATW **ppCF); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetParaFormat))(ITextHost *iface,const PARAFORMAT **ppPF); +typedef COLORREF (WINAPI typeof(ITextHostImpl_TxGetSysColor))(ITextHost *iface,int nIndex); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetBackStyle))(ITextHost *iface,TXTBACKSTYLE *pStyle); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetMaxLength))(ITextHost *iface,DWORD *pLength); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetScrollBars))(ITextHost *iface,DWORD *pdwScrollBar); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetPasswordChar))(ITextHost *iface,WCHAR *pch); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetAcceleratorPos))(ITextHost *iface,LONG *pch); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetExtent))(ITextHost *iface,LPSIZEL lpExtent); +typedef HRESULT (WINAPI typeof(ITextHostImpl_OnTxCharFormatChange))(ITextHost *iface,const CHARFORMATW *pcf); +typedef HRESULT (WINAPI typeof(ITextHostImpl_OnTxParaFormatChange))(ITextHost *iface,const PARAFORMAT *ppf); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetPropertyBits))(ITextHost *iface,DWORD dwMask,DWORD *pdwBits); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxNotify))(ITextHost *iface,DWORD iNotify,void *pv); +typedef HIMC (WINAPI typeof(ITextHostImpl_TxImmGetContext))(ITextHost *iface); +typedef void (WINAPI typeof(ITextHostImpl_TxImmReleaseContext))(ITextHost *iface,HIMC himc); +typedef HRESULT (WINAPI typeof(ITextHostImpl_TxGetSelectionBarWidth))(ITextHost *iface,LONG *lSelBarWidth); + +typedef HRESULT (WINAPI typeof(fnTextSrv_TxSendMessage))(ITextServices *iface,UINT msg,WPARAM wparam,LPARAM lparam,LRESULT* plresult); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxDraw))(ITextServices *iface,DWORD dwDrawAspect,LONG lindex,void* pvAspect,DVTARGETDEVICE* ptd,HDC hdcDraw,HDC hdcTargetDev,LPCRECTL lprcBounds,LPCRECTL lprcWBounds,LPRECT lprcUpdate,BOOL (__stdcall * pfnContinue)(DWORD),DWORD dwContinue,LONG lViewId); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetHScroll))(ITextServices *iface,LONG* plMin,LONG* plMax,LONG* plPos,LONG* plPage,BOOL* pfEnabled); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetVScroll))(ITextServices *iface,LONG* plMin,LONG* plMax,LONG* plPos,LONG* plPage,BOOL* pfEnabled); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxSetCursor))(ITextServices *iface,DWORD dwDrawAspect,LONG lindex,void* pvAspect,DVTARGETDEVICE* ptd,HDC hdcDraw,HDC hicTargetDev,LPCRECT lprcClient,INT x, INT y); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxQueryHitPoint))(ITextServices *iface,DWORD dwDrawAspect,LONG lindex,void* pvAspect,DVTARGETDEVICE* ptd,HDC hdcDraw,HDC hicTargetDev,LPCRECT lprcClient,INT x, INT y,DWORD* pHitResult); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxInplaceActivate))(ITextServices *iface,LPCRECT prcClient); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxInplaceDeactivate))(ITextServices *iface); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxUIActivate))(ITextServices *iface); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxUIDeactivate))(ITextServices *iface); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetText))(ITextServices *iface,BSTR* pbstrText); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxSetText))(ITextServices *iface,LPCWSTR pszText); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetCurrentTargetX))(ITextServices *iface,LONG* x); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetBaseLinePos))(ITextServices *iface,LONG* x); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetNaturalSize))(ITextServices *iface,DWORD dwAspect,HDC hdcDraw,HDC hicTargetDev,DVTARGETDEVICE* ptd,DWORD dwMode,const SIZEL* psizelExtent,LONG* pwidth,LONG* pheight); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetDropTarget))(ITextServices *iface,struct IDropTarget** ppDropTarget); +typedef HRESULT (WINAPI typeof(fnTextSrv_OnTxPropertyBitsChange))(ITextServices *iface,DWORD dwMask,DWORD dwBits); +typedef HRESULT (WINAPI typeof(fnTextSrv_TxGetCachedSize))(ITextServices *iface,DWORD* pdwWidth,DWORD* pdwHeight); + +#undef WINAPI +#undef HRESULT +#undef HDC +#undef BOOL +#undef COLORREF +#undef HIMC +#undef ITextHost +#undef INT +#undef UINT +#undef HBITMAP +#undef LPCRECT +#undef LPRECT +#undef LPCRECTL +#undef CHARFORMATW +#undef PARAFORMAT +#undef DWORD +#undef LONG +#undef WPARAM +#undef LPARAM +#undef HRGN +#undef HCURSOR +#undef LPPOINT +#undef TXTBACKSTYLE +#undef WCHAR +#undef BSTR +#undef LPCWSTR +#undef SIZEL +#undef LPSIZEL +#undef ITextServices +#undef LRESULT +#undef DVTARGETDEVICE + +//#undef typeof diff --git a/dll/win32/riched20/txtsrv.c b/dll/win32/riched20/txtsrv.c index 7ab2af45162..8db45e8e24d 100644 --- a/dll/win32/riched20/txtsrv.c +++ b/dll/win32/riched20/txtsrv.c @@ -88,7 +88,10 @@ HRESULT WINAPI CreateTextServices(IUnknown * pUnkOuter, ITextImpl->lpVtbl = &textservices_Vtbl; ITextImpl->editor = ME_MakeEditor(pITextHost, FALSE); ITextImpl->editor->exStyleFlags = 0; - ITextImpl->editor->rcFormat = (RECT){0,0,0,0}; + ITextImpl->editor->rcFormat.left = 0; + ITextImpl->editor->rcFormat.top = 0; + ITextImpl->editor->rcFormat.right = 0; + ITextImpl->editor->rcFormat.bottom = 0; ME_HandleMessage(ITextImpl->editor, WM_CREATE, 0, 0, TRUE, &hres); if (pUnkOuter)