421 lines
16 KiB
PHP
421 lines
16 KiB
PHP
|
|
|
|
{fake unit just to compile - not used under non windows}
|
|
|
|
{$mode delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$ifdef Windows} Windows, {$endif} Classes, SysUtils, Types;
|
|
|
|
const
|
|
TYMED_HGLOBAL = 1;
|
|
TYMED_ISTREAM = 4;
|
|
DVASPECT_CONTENT = 1;
|
|
CLSCTX_INPROC_SERVER = $0010;
|
|
DROPEFFECT_COPY = 1;
|
|
DROPEFFECT_LINK = 4;
|
|
DROPEFFECT_MOVE = 2;
|
|
DROPEFFECT_NONE = 0;
|
|
DROPEFFECT_SCROLL = dword($80000000);
|
|
DATADIR_GET = 1;
|
|
|
|
type
|
|
//types from win unit
|
|
Long = LongInt;
|
|
WinBool = LongBool;
|
|
Bool = WinBool;
|
|
ULONG = cardinal;
|
|
PULONG = ^ULONG;
|
|
LONGLONG = int64;
|
|
LPDWORD = ^DWORD;
|
|
LPVOID = pointer;
|
|
|
|
TCOLORREF = cardinal;
|
|
|
|
TIID = TGUID;
|
|
|
|
LARGE_INTEGER = record
|
|
case byte of
|
|
0: (LowPart : DWORD;
|
|
HighPart : LONG);
|
|
1: (QuadPart : LONGLONG);
|
|
end;
|
|
PLARGE_INTEGER = ^LARGE_INTEGER;
|
|
_LARGE_INTEGER = LARGE_INTEGER;
|
|
|
|
TLargeInteger = Int64;
|
|
PLargeInteger = ^TLargeInteger;
|
|
|
|
ULARGE_INTEGER = record
|
|
case byte of
|
|
0: (LowPart : DWORD;
|
|
HighPart : DWORD);
|
|
1: (QuadPart : LONGLONG);
|
|
end;
|
|
PULARGE_INTEGER = ^ULARGE_INTEGER;
|
|
_ULARGE_INTEGER = ULARGE_INTEGER;
|
|
|
|
|
|
HANDLE = System.THandle;
|
|
HWND = HANDLE;
|
|
//HRESULT = System.HResult;
|
|
|
|
HBITMAP = HANDLE;
|
|
HENHMETAFILE = HANDLE;
|
|
|
|
//activex types
|
|
|
|
|
|
IMoniker = Interface;
|
|
|
|
WINOLEAPI = HResult;
|
|
TLCID = DWORD;
|
|
|
|
OleChar = WChar;
|
|
LPOLESTR = ^OLECHAR;
|
|
HMetaFilePict = Pointer;
|
|
|
|
|
|
tagBIND_OPTS = Record
|
|
cvStruct, // sizeof(BIND_OPTS)
|
|
grfFlags,
|
|
grfMode,
|
|
dwTickCountDeadline : DWord;
|
|
End;
|
|
TBind_Opts = tagBIND_OPTS;
|
|
TCLIPFORMAT = Word;
|
|
|
|
tagDVTARGETDEVICE = Record
|
|
tdSize : DWord;
|
|
tdDriverNameOffset,
|
|
tdDeviceNameOffset,
|
|
tdPortNameOffset,
|
|
tdExtDevmodeOffset : Word;
|
|
Data : Record End;
|
|
End;
|
|
DVTARGETDEVICE = TagDVTARGETDEVICE;
|
|
PDVTARGETDEVICE = ^tagDVTARGETDEVICE;
|
|
|
|
|
|
|
|
tagFORMATETC = Record
|
|
CfFormat : Word {TCLIPFORMAT};
|
|
Ptd : PDVTARGETDEVICE;
|
|
dwAspect : DWORD;
|
|
lindex : Long;
|
|
tymed : DWORD;
|
|
End;
|
|
FORMATETC = TagFORMATETC;
|
|
TFORMATETC = FORMATETC;
|
|
LPFORMATETC = ^FORMATETC;
|
|
PFormatEtc = LPFORMATETC;
|
|
|
|
tagSTATDATA = Record
|
|
// field used by:
|
|
FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats
|
|
advf : DWord; // EnumAdvise, EnumData (cache)
|
|
padvSink : Pointer {IAdviseSink}; // EnumAdvise
|
|
dwConnection: DWord; // EnumAdvise
|
|
End;
|
|
STATDATA = TagStatData;
|
|
|
|
|
|
TagSTGMEDIUM = Record
|
|
Tymed : DWord;
|
|
Case Integer Of
|
|
0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown});
|
|
1 : (HMETAFILEPICT : hMetaFilePict );
|
|
2 : (HENHMETAFILE : hEnhMetaFile );
|
|
3 : (HGLOBAL : hGlobal );
|
|
4 : (lpszFileName : LPOLESTR );
|
|
5 : (pstm : Pointer{IStream} );
|
|
6 : (pstg : Pointer{IStorage} );
|
|
End;
|
|
USTGMEDIUM = TagSTGMEDIUM;
|
|
STGMEDIUM = USTGMEDIUM;
|
|
TStgMedium = TagSTGMEDIUM;
|
|
PStgMedium = ^TStgMedium;
|
|
LPSTGMEDIUM = ^STGMEDIUM;
|
|
|
|
IEnumString = Interface (IUnknown)
|
|
['{00000101-0000-0000-C000-000000000046}']
|
|
Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall;
|
|
// Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall;
|
|
Function Skip (Celt:ULong):Hresult;StdCall;
|
|
Function Reset:HResult;StdCall;
|
|
Function Clone(Out penum:IEnumString):HResult;StdCall;
|
|
End;
|
|
|
|
|
|
IEnumMoniker = Interface (IUnknown)
|
|
['{00000102-0000-0000-C000-000000000046}']
|
|
Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall;
|
|
// Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall;
|
|
Function Skip(celt:Ulong):HResult; StdCall;
|
|
Function Reset:HResult; StdCall;
|
|
Function Close(out penum:IEnumMoniker):HResult;StdCall;
|
|
End;
|
|
|
|
IEnumSTATDATA = Interface (IUnknown)
|
|
['{00000105-0000-0000-C000-000000000046}']
|
|
Function Next (Celt:ULong;Out xcelt;pceltfetched : PUlong):HResult; StdCall;
|
|
// Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall;
|
|
Function Skip(Celt:ULong):HResult;StdCall;
|
|
Function Reset:HResult;StdCall;
|
|
Function Clone(out penum:IEnumstatdata):HResult;StdCall;
|
|
End;
|
|
|
|
IEnumFORMATETC = Interface (IUnknown)
|
|
['{00000103-0000-0000-C000-000000000046}']
|
|
Function Next(Celt:ULong;Out Rgelt:FormatEtc;pceltFetched:pULong=nil):HResult; StdCall;
|
|
// Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall;
|
|
Function Skip(Celt:ULong):HResult;StdCall;
|
|
Function Reset:HResult;StdCall;
|
|
Function Clone(out penum:IEnumFORMATETC):HResult;StdCall;
|
|
End;
|
|
|
|
|
|
|
|
IPersist = Interface (IUnknown)
|
|
['{0000010c-0000-0000-C000-000000000046}']
|
|
Function GetClassId(clsid:TClsId):HResult; StdCall;
|
|
End;
|
|
|
|
IPersistStream = Interface(IPersist)
|
|
['{00000109-0000-0000-C000-000000000046}']
|
|
Function IsDirty:HResult; StdCall;
|
|
Function Load(Const stm: IStream):HResult; StdCall;
|
|
Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall;
|
|
Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall;
|
|
End;
|
|
|
|
|
|
IRunningObjectTable = Interface (IUnknown)
|
|
['{00000010-0000-0000-C000-000000000046}']
|
|
Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall;
|
|
Function Revoke (dwRegister:DWord):HResult; StdCall;
|
|
Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall;
|
|
Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall;
|
|
Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall;
|
|
Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall;
|
|
Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall;
|
|
End;
|
|
|
|
|
|
IBindCtx = Interface (IUnknown)
|
|
['{0000000e-0000-0000-C000-000000000046}']
|
|
Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall;
|
|
Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall;
|
|
Function ReleaseBoundObjects :HResult; StdCall;
|
|
Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall;
|
|
// Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall;
|
|
Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall;
|
|
// Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall;
|
|
Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall;
|
|
Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult;
|
|
Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall;
|
|
Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall;
|
|
Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall;
|
|
End;
|
|
|
|
|
|
PIMoniker = ^IMoniker;
|
|
IMoniker = Interface (IPersistStream)
|
|
['{0000000f-0000-0000-C000-000000000046}']
|
|
Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall;
|
|
// Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall;
|
|
Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall;
|
|
// Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall;
|
|
Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall;
|
|
Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall;
|
|
Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall;
|
|
Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall;
|
|
Function Hash (Out dwHash:Dword):HResult;StdCall;
|
|
Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall;
|
|
Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall;
|
|
Function Inverse(out mk : IMoniker):HResult; StdCall;
|
|
Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall;
|
|
Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall;
|
|
Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall;
|
|
Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall;
|
|
Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall;
|
|
End;
|
|
|
|
|
|
IAdviseSink = Interface (IUnknown)
|
|
['{0000010f-0000-0000-C000-000000000046}']
|
|
{$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif}
|
|
Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall;
|
|
Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall;
|
|
Procedure OnRename (Const pmk : IMoniker); StdCall;
|
|
Procedure OnSave; StdCall;
|
|
Procedure OnClose; StdCall;
|
|
End;
|
|
|
|
|
|
//Fake interfaces
|
|
IDataObject = Interface (IUnknown)
|
|
['{0000010e-0000-0000-C000-000000000046}']
|
|
Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL;
|
|
Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL;
|
|
Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL;
|
|
Function GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl;
|
|
Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall;
|
|
Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall;
|
|
Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall;
|
|
Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall;
|
|
Function EnumDAdvise(Out enumAdvise : IEnumStatData):HResult;StdCall;
|
|
End;
|
|
|
|
IDropTarget = interface(IUnknown)
|
|
['{00000122-0000-0000-C000-000000000046}']
|
|
function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
|
|
function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
|
|
function DragLeave: HResult;StdCall;
|
|
function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall;
|
|
end;
|
|
|
|
|
|
IDropSource = interface(IUnknown)
|
|
['{00000121-0000-0000-C000-000000000046}']
|
|
function QueryContinueDrag(fEscapePressed: BOOL;
|
|
grfKeyState: DWORD):HResult;StdCall;
|
|
function GiveFeedback(dwEffect: DWORD): HResult;StdCall;
|
|
end;
|
|
|
|
|
|
IDataAdviseHolder = Interface (IUnknown)
|
|
['{00000110-0000-0000-C000-000000000046}']
|
|
Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall;
|
|
Function Unadvise (dwConnection:Dword):HResult; StdCall;
|
|
Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall;
|
|
Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall;
|
|
End;
|
|
|
|
|
|
|
|
//Ole helper functions
|
|
|
|
function Succeeded(Status : HRESULT) : BOOLEAN;
|
|
|
|
function Failed(Status : HRESULT) : BOOLEAN;
|
|
|
|
//ActiveX functions that have wrong calling convention in fpc
|
|
|
|
function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;
|
|
|
|
function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;
|
|
|
|
function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;
|
|
|
|
function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;
|
|
|
|
procedure OleUninitialize;stdcall;
|
|
|
|
procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;
|
|
|
|
function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;
|
|
|
|
function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;
|
|
|
|
function OleFlushClipboard:WINOLEAPI;stdcall;
|
|
|
|
function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;
|
|
|
|
function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;
|
|
|
|
function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall;
|
|
|
|
implementation
|
|
|
|
|
|
function Succeeded(Status : HRESULT) : BOOLEAN;
|
|
begin
|
|
Succeeded:=Status and HRESULT($80000000)=0;
|
|
end;
|
|
|
|
function Failed(Status : HRESULT) : BOOLEAN;
|
|
begin
|
|
Failed:=Status and HRESULT($80000000)<>0;
|
|
end;
|
|
|
|
function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function RevokeDragDrop(hwnd: HWND): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource;
|
|
dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function OleInitialize(pvReserved: LPVOID): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
procedure OleUninitialize;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
procedure ReleaseStgMedium(_para1: LPSTGMEDIUM);
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function OleFlushClipboard: WINOLEAPI;
|
|
begin
|
|
// Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out
|
|
stm: IStream): WINOLEAPI;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown;
|
|
_para3: DWORD; const _para4: TIID; out _para5): HRESULT;
|
|
begin
|
|
//Logger.SendError([lcOle],'Ole function called in Linux');
|
|
//Logger.SendCallStack([lcOle],'Stack');
|
|
end;
|
|
|
|
|
|
end.
|