The preview is for a service that some installed program provides, Images and text files are easily preview-able so there is no service.mastintin wrote:txt, bat file not work properly yet ( I've looked )
Preview of a file
Re: Preview of a file
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Preview of a file
I am able to preview docx,xlsx,pptx but not doc, xls, ppt.
Any hint?
I am more interested in pdf, but it did not work for me. I get to see the navigation screen with controls except matter. I need to try again when I find some time again.
Any hint?
I am more interested in pdf, but it did not work for me. I get to see the navigation screen with controls except matter. I need to try again when I find some time again.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Preview of a file
on my pc, doc preview is provided by OpenIOffice, and docx preview by MSOffice
The preview is a service, it depends on installed application
The preview is a service, it depends on installed application
Re: Preview of a file
Nages. You ar this key in regedit ?
HKEY_CLASSES_ROOT\.xls\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"\Default :=" {00020827-0000-0000-C000-000000000046}"
if it does not create it , restart your pc and and try again.
tell us if it works.
one more thing ...
hb_parptr and hb_retptr is compatible with xHarbour ?
you can place a code c ++ in #pragma BEGINDUMP ? some modifier?
HKEY_CLASSES_ROOT\.xls\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"\Default :=" {00020827-0000-0000-C000-000000000046}"
if it does not create it , restart your pc and and try again.
tell us if it works.
one more thing ...
hb_parptr and hb_retptr is compatible with xHarbour ?
you can place a code c ++ in #pragma BEGINDUMP ? some modifier?
Re: Preview of a file
Hello,
I am starting with apologies for the long post. Here a little experiment I am doing at home.
It is an harbour/com interface, an I am starting with IPreviewHadler. For now the file are created by hand, but i am writing an harbour program that create them from idl.
let start with IUnknown, the COM base class:
now the intefaces we needs for preview: IPreviewHandler
IInitializeWithFile
and IInitializeWithStream
here the class that use all:
the TPreviewControl is re-usable.
except for the stream part I think the last file is easily understand-able, and this code should compile with borland 5 also.
I am starting with apologies for the long post. Here a little experiment I am doing at home.
It is an harbour/com interface, an I am starting with IPreviewHadler. For now the file are created by hand, but i am writing an harbour program that create them from idl.
let start with IUnknown, the COM base class:
Code: Select all
#include <hbclass.ch>
FUNCTION ExaVal( cString )
LOCAL nX, nVal
LOCAL cNewString := upper(AllTrim( cString ))
LOCAL nLen := Len( cNewString )
LOCAL nNumber := 0
FOR nX := 1 TO nLen
nVal := At( SubStr( cNewString, nX, 1 ), "0123456789ABCDEF" ) - 1
if nVal<0
return 0
endif
nNumber += ( nVal * ( 16 ** ( nLen - nX ) ) )
NEXT
RETURN nNumber
FUNC iidFromString(str)
LOCAL r
//example: {00000000-0000-0000-0000-000000000000}
// 12345678901234567890123456789012345678
// 1 2 3
if len(str)<>38 .or. ;
substr(str,1,1) <> "{" .or. substr(str,38,1) <> "}" .or. ;
substr(str,10,1) <> "-" .or. substr(str,15,1) <> "-" .or. ;
substr(str,20,1) <> "-" .or. substr(str,25,1) <> "-"
return {}
endif
r := Array(11)
r[1] := ExaVal(substr(str,2,8))
r[2] := ExaVal(substr(str,11,4))
r[3] := ExaVal(substr(str,16,4))
r[4] := ExaVal(substr(str,21,2))
r[5] := ExaVal(substr(str,23,2))
r[6] := ExaVal(substr(str,26,2))
r[7] := ExaVal(substr(str,28,2))
r[8] := ExaVal(substr(str,30,2))
r[9] := ExaVal(substr(str,32,2))
r[10] := ExaVal(substr(str,34,2))
r[11] := ExaVal(substr(str,36,2))
return r
CLASS IUnknown
DATA iPtr
METHOD New(iptr) CONSTRUCTOR
METHOD AddRef()
Destructor Release()
METHOD QueryInterface(riid, dest)
METHOD SetPtr(ptr)
endclass
METHOD New(iptr) CLASS IUnknown
::iPtr := iptr
return Self
METHOD SetPtr(ptr) CLASS IUnknown
if Valtype(::iPtr) == "P"
::Release()
endif
::iPtr := ptr
if Valtype(::iPtr) == "P"
::AddRef()
endif
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>
#include <hbapiitm.h>
#include <stdio.h>
/* 0*/ typedef HRESULT (__stdcall *IUnknown_QueryInterface )(void* This,REFIID riid,void **ppvObject);
/* 1*/ typedef ULONG (__stdcall *IUnknown_AddRef )(void* This);
/* 2*/ typedef ULONG (__stdcall *IUnknown_Release )(void* This);
void* GetFunctionPtr(void* ptrInt,int id)
{
void** _i = (void**)(*(void**)ptrInt);
return _i+id;
}
GUID GUIDFromArray(PHB_ITEM pArr)
{
GUID ret;
ret.Data1 = (unsigned long)(hb_itemGetND(hb_itemArrayGet(pArr,1)));
ret.Data2 = (unsigned short)hb_itemGetNL(hb_itemArrayGet(pArr,2));
ret.Data3 = (unsigned short)hb_itemGetNL(hb_itemArrayGet(pArr,3));
ret.Data4[0] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,4));
ret.Data4[1] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,5));
ret.Data4[2] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,6));
ret.Data4[3] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,7));
ret.Data4[4] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,8));
ret.Data4[5] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,9));
ret.Data4[6] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,10));
ret.Data4[7] = (unsigned char)hb_itemGetNL(hb_itemArrayGet(pArr,11));
return ret;
}
HB_FUNC( COCREATEINSTANCE ) //clsid, ctx, riid, dest
{
GUID clsid = GUIDFromArray(hb_param(1, HB_IT_ARRAY ));
DWORD ctx = hb_parnl( 2 );
GUID riiid = GUIDFromArray(hb_param(3, HB_IT_ARRAY ));
void* ptr;
//wchar_t test[50];
//StringFromGUID2(&clsid,test,50);
//MessageBoxW(0,test,L"CLSID",MB_OK);
//StringFromGUID2(&riiid,test,50);
//MessageBoxW(0,test,L"RIIID",MB_OK);
HRESULT hr;
#if defined(__cplusplus)
hr = CoCreateInstance( clsid, 0, ctx, riiid, ( void ** ) &ptr );
#else
hr = CoCreateInstance( &clsid, 0, ctx, &riiid, ( void ** ) &ptr );
#endif
if(ptr)
hb_storptr(ptr, 4);
else
hb_stor(4);
hb_retnl(hr);
}
HB_FUNC( IUNKNOWN_QUERYINTERFACE )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
if(ptr)
{
IUnknown_QueryInterface* fn = (IUnknown_QueryInterface*)GetFunctionPtr(ptr,0);
GUID riiid = GUIDFromArray(hb_param(1, HB_IT_ARRAY ));
void* pvObject;
HRESULT ret = (*fn)(ptr,&riiid,&pvObject);
if( pvObject != 0 )
hb_storptr(pvObject,2);
else
hb_stor(2);
hb_retnl(ret);
} else
{
hb_stor(2); //nil
hb_retnl(0x8032001C); //A required pointer is null.
}
}
HB_FUNC( IUNKNOWN_ADDREF )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
ULONG ret;
if( ptr )
{
IUnknown_AddRef* fn = (IUnknown_AddRef*)GetFunctionPtr(ptr,1);
ret = (*fn)(ptr);
} else
{
ret = 0x8032001C; //A required pointer is null.
}
hb_retnl(ret);
}
HB_FUNC( IUNKNOWN_RELEASE )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
ULONG ret;
if( ptr )
{
IUnknown_Release* fn = (IUnknown_Release*)GetFunctionPtr(ptr,2);
ret = (*fn)(ptr);
} else
{
ret = 0x8032001C; //A required pointer is null.
}
hb_retnl(ret);
}
#pragma ENDDUMP
Code: Select all
#include <hbclass.ch>
/* From ShObjIdl.idl
[
object,
uuid(8895b1c6-b41f-4c1c-a562-0d564250836f),
]
interface IPreviewHandler : IUnknown
{
HRESULT SetWindow(
[in] HWND hwnd,
[in] const RECT *prc);
HRESULT SetRect([in] const RECT *prc);
HRESULT DoPreview();
HRESULT Unload();
HRESULT SetFocus();
HRESULT QueryFocus([out] HWND* phwnd);
HRESULT TranslateAccelerator([in] MSG* pmsg);
}
*/
#define IID_IPreviewHandler {0x8895b1c6,0xb41f,0x4c1c,0xa5,0x62,0x0d,0x56,0x42,0x50,0x83,0x6f}
class IPreviewHandler FROM IUnknown
METHOD SetWindow(hwnd,prc)
METHOD SetRect(prc)
METHOD DoPreview()
METHOD Unload()
METHOD SetFocus()
METHOD QueryFocus(phwnd)
//METHOD TranslateAccelerator(pmsg); msg strunct non handled
endclass
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>
#include <hbapiitm.h>
/* 3*/typedef HRESULT (__stdcall *IPreviewHandler_SetWindow)(void* This,HWND hwnd,const RECT *prc);
/* 4*/typedef HRESULT (__stdcall *IPreviewHandler_SetRect)(void* This,const RECT *prc);
/* 5*/typedef HRESULT (__stdcall *IPreviewHandler_DoPreview)(void* This);
/* 6*/typedef HRESULT (__stdcall *IPreviewHandler_Unload)(void* This);
/* 7*/typedef HRESULT (__stdcall *IPreviewHandler_SetFocus)(void* This);
/* 8*/typedef HRESULT (__stdcall *IPreviewHandler_QueryFocus)(void* This,HWND* phwnd);
/* 9*/typedef HRESULT (__stdcall *IPreviewHandler_TranslateAccelerator)(void* This,MSG* pmsg);
void* GetFunctionPtr(void* ptrInt,int id);
HB_FUNC( IPREVIEWHANDLER_SETWINDOW )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_SetWindow* fn = (IPreviewHandler_SetWindow*)GetFunctionPtr(ptr,3);
#ifndef _WIN64
HWND hWnd = ( HWND ) hb_parnl( 1 );
#else
HWND hWnd = ( HWND ) hb_parnll( 1 );
#endif
RECT rc,*prc = NULL;
HRESULT retVal;
if( hb_param(2, HB_IT_ARRAY) != 0 )
{
rc.top = hb_parvni( 2, 1);
rc.left = hb_parvni( 2, 2);
rc.bottom = hb_parvni( 2, 3);
rc.right = hb_parvni( 2, 4);
prc = &rc;
} else prc = 0;
retVal = (*fn)(ptr,hWnd,prc);
hb_retnl(retVal);
}
HB_FUNC( IPREVIEWHANDLER_SETRECT )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_SetRect* fn = (IPreviewHandler_SetRect*)GetFunctionPtr(ptr,4);
RECT rc,*prc = NULL;
HRESULT retVal;
if( hb_param(1, HB_IT_ARRAY) != 0 )
{
rc.top = hb_parvni( 1, 1);
rc.left = hb_parvni( 1, 2);
rc.bottom = hb_parvni( 1, 3);
rc.right = hb_parvni( 1, 4);
prc = &rc;
} else prc = 0;
retVal = (*fn)(ptr,prc);
hb_retnl(retVal);
}
HB_FUNC( IPREVIEWHANDLER_DOPREVIEW )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_DoPreview* fn = (IPreviewHandler_DoPreview*)GetFunctionPtr(ptr,5);
HRESULT retVal;
retVal = (*fn)(ptr);
hb_retnl(retVal);
}
HB_FUNC( IPREVIEWHANDLER_UNLOAD )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_Unload* fn = (IPreviewHandler_Unload*)GetFunctionPtr(ptr,6);
HRESULT retVal;
retVal = (*fn)(ptr);
hb_retnl(retVal);
}
HB_FUNC( IPREVIEWHANDLER_SETFOCUS )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_SetFocus* fn = (IPreviewHandler_SetFocus*)GetFunctionPtr(ptr,7);
HRESULT retVal;
retVal = (*fn)(ptr);
hb_retnl(retVal);
}
HB_FUNC( IPREVIEWHANDLER_QUERYFOCUS )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IPreviewHandler_QueryFocus* fn = (IPreviewHandler_QueryFocus*)GetFunctionPtr(ptr,7);
HWND hWnd;
HRESULT retVal;
retVal = (*fn)(ptr,&hWnd);
#ifndef _WIN64
hb_stornl((long)hWnd,1);
#else
hb_stornll((HB_LONGLONG)hWnd,1);
#endif
hb_retnl(retVal);
}
#pragma ENDDUMP
Code: Select all
#include <hbclass.ch>
/* From propsys.idl
[
uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),
object,
pointer_default(unique)
]
interface IInitializeWithFile : IUnknown
{
HRESULT Initialize([in, string] LPCWSTR pszFilePath, [in] DWORD grfMode);
}
*/
#define IID_IInitializeWithFile {0xb7d14566,0x0509,0x4cce,0xa7,0x1f,0x0a,0x55,0x42,0x33,0xbd,0x9b}
class IInitializeWithFile FROM IUnknown
METHOD Initialize(pszFilePath,grfMode)
endclass
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>
#include <hbapiitm.h>
/* 3*/typedef HRESULT (__stdcall *IInitializeWithFile_Initialize)(void* This,LPCWSTR pszFilePath, DWORD grfMode);
void* GetFunctionPtr(void* ptrInt,int id);
LPWSTR UTF8toUTF16( LPCSTR utf8 );
HB_FUNC( IINITIALIZEWITHFILE_INITIALIZE )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IInitializeWithFile_Initialize* fn = (IInitializeWithFile_Initialize*)GetFunctionPtr(ptr,3);
LPCWSTR pszFilePath = UTF8toUTF16(hb_parc(1));
DWORD grfMode = hb_parnl(2);
HRESULT retVal;
retVal = (*fn)(ptr,pszFilePath,grfMode);
hb_xfree( (void*) pszFilePath);
hb_retnl(retVal);
}
#pragma ENDDUMP
Code: Select all
#include <hbclass.ch>
/* From propsys.idl
[
uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f),
object,
pointer_default(unique)
]
interface IInitializeWithStream : IUnknown
{
[local] HRESULT Initialize([in, annotation("_In_")] IStream *pstream, [in, annotation("_In_")] DWORD grfMode);
[call_as(Initialize)] HRESULT RemoteInitialize([in] IStream *pstream, [in] DWORD grfMode);
}*/
#define IID_IInitializeWithStream {0xb824b49d,0x22ac,0x4161,0xac,0x8a,0x99,0x16,0xe8,0xfa,0x3f,0x7f}
class IInitializeWithStream FROM IUnknown
METHOD Initialize(pstream, grfMode)
endclass
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>
#include <hbapiitm.h>
/* 3*/typedef HRESULT (__stdcall *IInitializeWithStream_Initialize)(void* This,IStream *pstream, DWORD grfMode);
void* GetFunctionPtr(void* ptrInt,int id);
HB_FUNC( IINITIALIZEWITHSTREAM_INITIALIZE )
{
PHB_ITEM pSelf = hb_stackSelfItem();
void* ptr = hb_itemGetPtr(hb_itemArrayGet(pSelf,1));
IInitializeWithStream_Initialize* fn = (IInitializeWithStream_Initialize*)GetFunctionPtr(ptr,3);
IStream* pstream = (IStream*) hb_parptr(1);
DWORD grfMode = hb_parnl(2);
HRESULT retVal;
retVal = (*fn)(ptr,pstream,grfMode);
hb_retnl(retVal);
}
#pragma ENDDUMP
Code: Select all
#include <fivewin.ch>
#include <winapi.ch>
function main()
local oDlg
local oPreview
// IMPORTANT!!
CoInitialize()
DEFINE WINDOW oDlg FROM 0,0 TO 650,650 PIXEL TITLE "Test"
oPreview := TPreviewControl():New(30,10,oDlg, 600,600)
oPreview:AcceptDropFile()
@ 8,8 BUTTON "Clear" ACTION oPreview:Clear() PIXEL SIZE 32,16 OF oDlg
ACTIVATE WINDOW oDlg CENTERED
return nil
CLASS TPreviewControl FROM TControl
CLASSDATA lRegistered AS LOGICAL
DATA pPreview INIT 0
DATA pStream INIT 0
METHOD New( nRow, nCol, oWnd, nWidth, nHeight ) CONSTRUCTOR
METHOD Destroy()
METHOD SetFile(cFile)
METHOD AcceptDropFile()
METHOD Clear()
METHOD DropFiles( hDrop )
METHOD Resize()
METHOD Display() INLINE ::BeginPaint(), ::Paint(), ::EndPaint(), 0
ENDCLASS
METHOD New( nRow, nCol, oWnd, nWidth, nHeight ) CLASS TPreviewControl
DEFAULT nRow := 10, nCol := 10, oWnd := GetWndDefault(), nWidth := 64, nHeight := 64
::oWnd := oWnd
::nId := ::GetNewId()
::nStyle := nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP, WS_CLIPCHILDREN )
::nTop := nRow
::nLeft := nCol
::nBottom := ::nTop + nHeight - 1
::nRight := ::nLeft + nWidth
::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )
::Create()
oWnd:AddControl( Self )
return Self
METHOD Destroy()
::Clear()
return ::Super:Destroy()
METHOD Clear() CLASS TPreviewControl
if valtype(::pPreview) == "O"
::pPreview:Unload()
endif
if Valtype(::pStream) == "P"
DestroyStream(::pStream)
endif
::pPreview := 0
::pStream := 0
return nil
#define HKEY_CLASSES_ROOT 2147483648 // 0x80000000
#define IID_IPreviewHandler {0x8895b1c6,0xb41f,0x4c1c,0xa5,0x62,0x0d,0x56,0x42,0x50,0x83,0x6f}
#define IID_IInitializeWithFile {0xb7d14566,0x0509,0x4cce,0xa7,0x1f,0x0a,0x55,0x42,0x33,0xbd,0x9b}
#define IID_IInitializeWithStream {0xb824b49d,0x22ac,0x4161,0xac,0x8a,0x99,0x16,0xe8,0xfa,0x3f,0x7f}
#define CLSCTX_INPROC_SERVER 0x1
#define CLSCTX_LOCAL_SERVER 0x4
METHOD SetFile(cFile) CLASS TPreviewControl
LOCAL cExtension, cKey, cid, nError, cls
LOCAL pInit
::Clear()
cExtension := substr(cFile,rat(".",cFile))
cKey = cExtension + "\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"
cid := ""
//get preview guid
nError = RegQueryValue( HKEY_CLASSES_ROOT, cKey, @cid )
if nError <> 0
cKey := Space(100)
RegQueryValue( HKEY_CLASSES_ROOT, cExtension, @cKey )
cKey := StrTran( cKey, Chr(0), "" )
cKey := Alltrim(cKey) + "\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"
nError = RegQueryValue( HKEY_CLASSES_ROOT, cKey, @cid )
endif
// crete the preview object
if nError = 0
cid := StrTran( cid, Chr(0), "" )
cls := iidFromString(cid)
nError := CoCreateInstance( cls, nOr( CLSCTX_INPROC_SERVER, CLSCTX_LOCAL_SERVER), IID_IPreviewHandler, @::pPreview )
endif
if Valtype(::pPreview) == "P"
::pPreview := IPreviewHandler():New(::pPreview)
//init the preview
::pPreview:QueryInterface(IID_IInitializeWithFile, @pInit)
if Valtype(pInit) == "P"
pInit := IInitializeWithFile():New(pInit)
pInit:Initialize(cFile, /*STGM_READ*/0)
else
::pPreview:QueryInterface(IID_IInitializeWithStream, @pInit)
if Valtype(pInit) == "P"
pInit := IInitializeWithStream():New(pInit)
::pStream := GetStream(cFile)
pInit:Initialize(::pStream, /*STGM_READ*/0)
else
::pPreview := 0
endif
endif
endif
if valtype(::pPreview) == "O"
::pPreview:SetWindow(::hWnd, GetClientRect( ::hWnd ))
::pPreview:DoPreview()
endif
return self
METHOD Resize()
::pPreview:SetRect( GetClientRect( ::hWnd ))
return self
METHOD AcceptDropFile() CLASS TPreviewControl
DragAcceptFiles( ::hWnd, .T. )
return Self
METHOD DropFiles( hDrop ) CLASS TPreviewControl
LOCAL files
files = DragQueryFiles( hDrop )
::SetFile( files[1])
return Self
#pragma BEGINDUMP
#define CINTERFACE
#define COBJMACROS
#include <Ole2.h>
#include <hbapi.h>
#include <unknwn.h>
LPWSTR UTF8toUTF16( LPCSTR utf8 );
HB_FUNC( GETSTREAM ) // cFileName
{
wchar_t* cFileName = UTF8toUTF16(hb_parc(1));
HANDLE hFile = CreateFileW(cFileName,FILE_READ_DATA,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL );
DWORD dwSize = GetFileSize( hFile, NULL );
HGLOBAL hGlobal= GlobalAlloc(GPTR, dwSize );
BYTE * pByte = (BYTE *)GlobalLock(hGlobal);
LPSTREAM pStream;
ReadFile(hFile,pByte,dwSize,&dwSize,NULL);
GlobalUnlock(hGlobal);
CloseHandle( hFile );
CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
hb_xfree( (void*) cFileName);
hb_retptr(pStream);
}
HB_FUNC( DESTROYSTREAM ) // stream
{
LPSTREAM pStream = hb_parptr(1);
HGLOBAL hGlobal;
if( pStream )
{
GetHGlobalFromStream(pStream,&hGlobal);
if(hGlobal)
GlobalFree(hGlobal);
IUnknown_Release(pStream);
}
hb_ret();
}
#pragma ENDDUMP
except for the stream part I think the last file is easily understand-able, and this code should compile with borland 5 also.
Re: Preview of a file
every com object must be registered, add the uuid from another pc is useless.mastintin wrote:Nages. You ar this key in regedit ?
HKEY_CLASSES_ROOT\.xls\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"\Default :=" {00020827-0000-0000-C000-000000000046}"
Re: Preview of a file
AntoninoP wrote: every com object must be registered, add the uuid from another pc is useless.
It is correct but are com object registered by default in the installation of windows and preview for Excel is installed it can see xlsx.
On :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers
They are the previewers installed and its keys .They are the same Keys on all computers (except versions)
It's easy to add support for other file types ..
I not have viewer for txt or prg files. I added the keys :
HKEY_CLASSES_ROOT\.txt\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}\default
and
HKEY_CLASSES_ROOT\.prg\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}\default
and key for PreviewHadler for txt ( view : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers )
default := {1531d583-8375-4d3f-b5fb-d23bbd169f22}
\default:={1531d583-8375-4d3f-b5fb-d23bbd169f22}
Last edited by mastintin on Fri Jul 10, 2015 5:56 am, edited 6 times in total.
Re: Preview of a file
UFF. all this leaves my code in a jokeAntoninoP wrote:Hello,
I am starting with apologies for the long post. Here a little experiment I am doing at home.
It is an harbour/com interface, an I am starting with IPreviewHadler. For now the file are created by hand, but i am writing an harbour program that create them from idl.
.....
Anyway here I leave the code that I have in just a prg and extra file header for bcc582.
Me is running in pdf, excel, word, rtf, cmd,bat, txt files (Excel and Word does not release).
In :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers
They are the previewers installed and its keys .
The Shextra.h file :
Code: Select all
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
/* File created by MIDL compiler version 6.00.0366 */
/* Compiler settings for shobjidl.idl:
Oicf, W1, Zp8, env=Win32 (32b run)
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
//@@MIDL_FILE_HEADING( )
#pragma warning( disable: 4049 ) /* more than 64k source lines */
/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include "rpc.h"
#include "rpcndr.h"
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif // __RPCNDR_H_VERSION__
#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/
#ifndef __shobjidl_h__
#define __shobjidl_h__
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
/* Forward Declarations */
#ifndef __IPreviewHandler_FWD_DEFINED__
#define __IPreviewHandler_FWD_DEFINED__
typedef interface IPreviewHandler IPreviewHandler;
#endif /* __IPreviewHandler_FWD_DEFINED__ */
#ifndef __IInitializeWithFile_FWD_DEFINED__
#define __IInitializeWithFile_FWD_DEFINED__
typedef interface IInitializeWithFile IInitializeWithFile;
#endif /* __IInitializeWithFile_FWD_DEFINED__ */
#ifndef __IInitializeWithStream_FWD_DEFINED__
#define __IInitializeWithStream_FWD_DEFINED__
typedef interface IInitializeWithStream IInitializeWithStream;
#endif /* __IInitializeWithStream_FWD_DEFINED__ */
#ifdef __cplusplus
extern "C"{
#endif
void * __RPC_USER MIDL_user_allocate(size_t);
void __RPC_USER MIDL_user_free( void * );
/* interface __MIDL_itf_shobjidl_0000 */
/* [local] */
#ifndef _WINRESRC_
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
#else
#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
#error _WIN32_IE setting conflicts with _WIN32_WINNT setting
#endif
#endif
#endif
extern RPC_IF_HANDLE __MIDL_itf_shobjidl_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_shobjidl_0000_v0_0_s_ifspec;
#ifndef __IPreviewHandler_INTERFACE_DEFINED__
#define __IPreviewHandler_INTERFACE_DEFINED__
/* interface IPreviewHandler */
/* [uuid][object] */
EXTERN_C const IID IID_IPreviewHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8895b1c6-b41f-4c1c-a562-0d564250836f")
IPreviewHandler : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE SetWindow(
/* [in] */ HWND hwnd,
/* [in] */ const RECT *prc) = 0;
virtual HRESULT STDMETHODCALLTYPE SetRect(
/* [in] */ const RECT *prc) = 0;
virtual HRESULT STDMETHODCALLTYPE DoPreview( void) = 0;
virtual HRESULT STDMETHODCALLTYPE Unload( void) = 0;
virtual HRESULT STDMETHODCALLTYPE SetFocus( void) = 0;
virtual HRESULT STDMETHODCALLTYPE QueryFocus(
/* [out] */ HWND *phwnd) = 0;
virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
/* [in] */ MSG *pmsg) = 0;
};
#else /* C style interface */
typedef struct IPreviewHandlerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IPreviewHandler * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IPreviewHandler * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IPreviewHandler * This);
HRESULT ( STDMETHODCALLTYPE *SetWindow )(
IPreviewHandler * This,
/* [in] */ HWND hwnd,
/* [in] */ const RECT *prc);
HRESULT ( STDMETHODCALLTYPE *SetRect )(
IPreviewHandler * This,
/* [in] */ const RECT *prc);
HRESULT ( STDMETHODCALLTYPE *DoPreview )(
IPreviewHandler * This);
HRESULT ( STDMETHODCALLTYPE *Unload )(
IPreviewHandler * This);
HRESULT ( STDMETHODCALLTYPE *SetFocus )(
IPreviewHandler * This);
HRESULT ( STDMETHODCALLTYPE *QueryFocus )(
IPreviewHandler * This,
/* [out] */ HWND *phwnd);
HRESULT ( STDMETHODCALLTYPE *TranslateAccelerator )(
IPreviewHandler * This,
/* [in] */ MSG *pmsg);
END_INTERFACE
} IPreviewHandlerVtbl;
interface IPreviewHandler
{
CONST_VTBL struct IPreviewHandlerVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IPreviewHandler_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IPreviewHandler_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IPreviewHandler_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IPreviewHandler_SetWindow(This,hwnd,prc) \
( (This)->lpVtbl -> SetWindow(This,hwnd,prc) )
#define IPreviewHandler_SetRect(This,prc) \
( (This)->lpVtbl -> SetRect(This,prc) )
#define IPreviewHandler_DoPreview(This) \
( (This)->lpVtbl -> DoPreview(This) )
#define IPreviewHandler_Unload(This) \
( (This)->lpVtbl -> Unload(This) )
#define IPreviewHandler_SetFocus(This) \
( (This)->lpVtbl -> SetFocus(This) )
#define IPreviewHandler_QueryFocus(This,phwnd) \
( (This)->lpVtbl -> QueryFocus(This,phwnd) )
#define IPreviewHandler_TranslateAccelerator(This,pmsg) \
( (This)->lpVtbl -> TranslateAccelerator(This,pmsg) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IPreviewHandler_INTERFACE_DEFINED__ */
#ifndef __IInitializeWithFile_INTERFACE_DEFINED__
#define __IInitializeWithFile_INTERFACE_DEFINED__
/* interface IInitializeWithFile */
/* [unique][object][uuid] */
EXTERN_C const IID IID_IInitializeWithFile;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b7d14566-0509-4cce-a71f-0a554233bd9b")
IInitializeWithFile : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE Initialize(
/* [string][in] */ LPCWSTR pszFilePath,
/* [in] */ DWORD grfMode) = 0;
};
#else /* C style interface */
typedef struct IInitializeWithFileVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IInitializeWithFile * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IInitializeWithFile * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IInitializeWithFile * This);
HRESULT ( STDMETHODCALLTYPE *Initialize )(
IInitializeWithFile * This,
/* [string][in] */ LPCWSTR pszFilePath,
/* [in] */ DWORD grfMode);
END_INTERFACE
} IInitializeWithFileVtbl;
interface IInitializeWithFile
{
CONST_VTBL struct IInitializeWithFileVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInitializeWithFile_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInitializeWithFile_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInitializeWithFile_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInitializeWithFile_Initialize(This,pszFilePath,grfMode) \
( (This)->lpVtbl -> Initialize(This,pszFilePath,grfMode) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInitializeWithFile_INTERFACE_DEFINED__ */
#ifndef __IInitializeWithStream_INTERFACE_DEFINED__
#define __IInitializeWithStream_INTERFACE_DEFINED__
/* interface IInitializeWithStream */
/* [unique][object][uuid] */
EXTERN_C const IID IID_IInitializeWithStream;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b824b49d-22ac-4161-ac8a-9916e8fa3f7f")
IInitializeWithStream : public IUnknown
{
public:
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Initialize(
/* [annotation][in] */
IStream *pstream,
/* [annotation][in] */
DWORD grfMode) = 0;
};
#else /* C style interface */
typedef struct IInitializeWithStreamVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IInitializeWithStream * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IInitializeWithStream * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IInitializeWithStream * This);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Initialize )(
IInitializeWithStream * This,
/* [annotation][in] */
IStream *pstream,
/* [annotation][in] */
DWORD grfMode);
END_INTERFACE
} IInitializeWithStreamVtbl;
interface IInitializeWithStream
{
CONST_VTBL struct IInitializeWithStreamVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInitializeWithStream_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInitializeWithStream_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInitializeWithStream_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInitializeWithStream_Initialize(This,pstream,grfMode) \
( (This)->lpVtbl -> Initialize(This,pstream,grfMode) )
#endif /* COBJMACROS */
#endif /* C style interface */
/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_RemoteInitialize_Proxy(
IInitializeWithStream * This,
/* [in] */ IStream *pstream,
/* [in] */ DWORD grfMode);
void __RPC_STUB IInitializeWithStream_RemoteInitialize_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
#endif /* __IInitializeWithStream_INTERFACE_DEFINED__ */
#ifdef __cplusplus
}
#endif
#endif
#pragma option pop /*P_O_Pop*/
Code: Select all
// Our first DialogBox sample
#include "FiveWin.ch"
#include <fivewin.ch>
#define HKEY_CLASSES_ROOT 2147483648 // 0x80000000
memvar oPreview
function main()
local oDlg
local hStream
local cFile
public oPreview
// IMPORTANT!!
cFile:= cGetfile("coge","*.*")
if !empty( cfile )
DEFINE WINDOW oDlg FROM 0,0 TO 650,650 PIXEL TITLE "Test"
GenHPreview( cFile, oDlg )
ACTIVATE WINDOW oDlg CENTERED
endif
return nil
Function GenHPreview( cFile, oDlg )
local cCLSString
CoInitialize()
cCLSString := SeekCLSString( cFile )
oPreview := CreateHPreviewC( cCLSString )
ADDPREVIEWC(oDlg:hWnd, {10,10,610,610}, cFile,oPreview )
Return nil
Function SeekCLSString( cFile )
local cExtension
local cKey := ""
local oReg
local cShellExe := "\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}"
local cValue
if !Empty( cFile )
cExtension := cFileExt( cFile )
if Empty( cExtension )
MsgInfo( "not Extension File" )
Return nil
endif
cExtension := "."+ cExtension
cKey := cExtension + cShellExe
// msginfo(cKey)
oReg := TReg32():New( HKEY_CLASSES_ROOT, ckey )
cValue := oReg:Get()
if Empty( cValue )
oreg:Close()
// msginfo(cKey)
oReg := TReg32():New( HKEY_CLASSES_ROOT, cExtension )
cValue := oReg:Get()
if Empty( cValue )
oReg:Close()
MsgInfo( "Clave no encontrada" )
Return nil
endif
cKey := cValue + cShellExe
// msginfo(cKey)
oReg := TReg32():New( HKEY_CLASSES_ROOT, cKey )
cValue := oReg:Get()
if Empty( cValue )
MsgInfo( "Clave no encontrada" )
Return nil
endIf
endif
endif
Return cValue
#pragma BEGINDUMP
#define CINTERFACE
#define COBJMACROS
#if ( __BORLANDC__ <= 0x582 )
#include <Shextra.h>
#endif
#include <windows.h>
#include <hbapi.h>
#include <CommCtrl.h>
#include <ShObjIdl.h>
#include <Shlwapi.h>
#include <ShlGuid.h>
LPWSTR AnsiToWide( LPSTR cAnsi );
const IID IID_IPreviewHandler = {0x8895b1c6, 0xb41f, 0x4c1c, {0xa5, 0x62,
0x0d, 0x56, 0x42, 0x50, 0x83, 0x6f}};
HB_FUNC( CREATEHPREVIEWC ) // clsStr
{
CLSID cls;
IPreviewHandler* pRet=0;
CLSIDFromString( AnsiToWide(( char * ) hb_parc( 1 )),&cls);
if( CoCreateInstance( &cls, 0, CLSCTX_INPROC_SERVER |CLSCTX_LOCAL_SERVER, &IID_IPreviewHandler, ( void ** ) &pRet ) ==S_OK )
{
#ifndef _WIN64
hb_retnl( (long) pRet ) ;
#else
hb_retnll( (long long) pRet );
#endif
return ;
}
// MessageBoxW(0,cKey,cExtension,MB_OK);
#ifndef _WIN64
hb_retnl( (long) 0 );
#else
hb_retnll( (long long) 0 );
#endif
return ;
}
EXTERN_C const IID IID_IInitializeWithFile = {0xb7d14566, 0x0509, 0x4cce, {0xa7,
0x1f, 0x0a, 0x55, 0x42, 0x33, 0xbd, 0x9b}};
EXTERN_C const IID IID_IInitializeWithStream =
{ 0xB824B49D, 0x22AC, 0x4161, { 0xAC, 0x8A, 0x99, 0x16, 0xE8, 0xFA, 0x3F, 0x7F } };
HB_FUNC( ADDPREVIEWC ) // hWnd, {nTop, nLeft, nBottom, nRight}, cFileName,pPreview
{
#ifndef _WIN64
HWND hWnd = ( HWND ) hb_parnl( 1 );
IPreviewHandler* pPreview = ( IPreviewHandler* ) hb_parnl( 4 );
#define RET hb_retnl( (long) pPreview );
#else
HWND hWnd = ( HWND ) hb_parnll( 1 );
IPreviewHandler* pPreview = ( IPreviewHandler* ) hb_parnll( 4 );
#define RET hb_retnll( (long long) pPreview );
#endif
RECT rectPreview;
LPWSTR cFileName = AnsiToWide(( char * ) hb_parc( 3 ));
LPCWSTR cExtension = wcsrchr(cFileName,L'.');
IInitializeWithFile* pFile;
IInitializeWithStream* pIStream;
if(pPreview==0)
{
MessageBoxW(0,L"no pPreview",cExtension,MB_OK);
RET
return;
}
IPreviewHandler_QueryInterface(pPreview, &IID_IInitializeWithFile,(void**)&pFile );
IPreviewHandler_QueryInterface(pPreview, &IID_IInitializeWithStream,(void**)&pIStream );
if(pFile==0 && pIStream==0)
{
MessageBoxW(0,L"no pfile no pStream",cExtension,MB_OK);
IPreviewHandler_Unload(pPreview);
pPreview = 0;
RET
return;
}
if(pFile!=0)
{
IInitializeWithFile_Initialize(pFile, cFileName, STGM_READ);
} else
{ //pIStream!=0
HANDLE hFile = CreateFileW(cFileName,FILE_READ_DATA,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL );
if( INVALID_HANDLE_VALUE != hFile )
{
DWORD dwSize = GetFileSize( hFile, NULL );
HGLOBAL hGlobal= GlobalAlloc(GPTR, dwSize );
BYTE * pByte = (BYTE *)GlobalLock(hGlobal);
if( pByte )
{
LPSTREAM pStream;
ReadFile(hFile,pByte,dwSize,&dwSize,NULL);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
IInitializeWithStream_Initialize(pIStream, pStream, STGM_READ);
}
CloseHandle( hFile );
}
}
hb_xfree( cFileName );
rectPreview.top = hb_parvni(2,1);
rectPreview.left = hb_parvni(2,2);
rectPreview.bottom = hb_parvni(2,3);
rectPreview.right = hb_parvni(2,4);
IPreviewHandler_SetWindow( pPreview, hWnd, &rectPreview );
IPreviewHandler_DoPreview( pPreview );
RET
}
HB_FUNC( UnloadPreviewC ) //preview
{
#ifndef _WIN64
IPreviewHandler* pPreview = ( IPreviewHandler* ) hb_parnl( 1 );
#else
IPreviewHandler* pPreview = ( IPreviewHandler* ) hb_parnll( 1 );
#endif
if( pPreview )
{
IPreviewHandler_Unload(pPreview);
}
}
#pragma ENDDUMP
Last edited by mastintin on Fri Jul 10, 2015 7:07 am, edited 1 time in total.
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Preview of a file
Manuel and Antonio,
This is a great help from you.
This is a great help from you.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Preview of a file
for view Previewhandlers instaled :
Code: Select all
#include "FiveWin.ch"
#include <fivewin.ch>
#define HKEY_CLASSES_ROOT 2147483648 // 0x80000000
#define HKEY_LOCAL_MACHINE 2147483650
function main()
local aPreviewHandler:= {}
local cKey := "SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers"
local oReg := TReg32():New( HKEY_LOCAL_MACHINE, ckey )
local nHandle, cValue, n := 0
while REGENUMValue( oReg:nHandle, n++, @cValue ) == 0
aadd( aPreviewHandler, { cValue, oreg:get(cValue) } )
end
XBrowser aPreviewHandler
oReg:close()
return nil
//--------------------------------------------------------------------
Re: Preview of a file
Excellentmastintin wrote:for view Previewhandlers instaled :
Thank you for sharing
Regards, Greetings
Try FWH. You will enjoy it's simplicity and power.!
Try FWH. You will enjoy it's simplicity and power.!
- Silvio.Falconi
- Posts: 4956
- Joined: Thu Oct 18, 2012 7:17 pm
Re: Preview of a file
Manuel I test your sample and here not run
Code: Select all
Progetto: test, Ambiente: xFive_Pelles:
[1]:Harbour.Exe test.prg /m /n0 /gc1 /es2 /iC:\Work\fwh\include /ic:\work\xHarbour\Include /jC:\Work\Errori\PREVIE~2\I18n\Main.hil /iinclude;c:\work\fwh\include;c:\work\xHarbour\include /oObj\test.c
xHarbour 1.2.3 Intl. (SimpLex) (Build 20140725)
Copyright 1999-2014, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'test.prg'...
Generating international list to 'C:\Work\Errori\PREVIE~2\I18n\Main.hil'...
Generating C source output to 'Obj\test.c'...
Done.
Lines 89, Functions/Procedures 3, pCodes 275
[1]:Bcc32.Exe -M -c -O2 -tW -v- -X -DHB_FM_STATISTICS_OFF -DHB_NO_DEFAULT_API_MACROS -DHB_NO_DEFAULT_STACK_MACROS -DHB_OS_WIN_32 -IC:\Work\fwh\include -IC:\Work\bcc582\Include;c:\work\xHarbour\Include -nC:\Work\Errori\PREVIE~2\Obj test.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
test.c:
Error E2209 test.prg 97: Unable to open include file 'Shextra.h'
Error E2451 test.prg 117: Undefined symbol 'IPreviewHandler' in function HB_FUN_CREATEHPREVIEWC
Error E2451 test.prg 153: Undefined symbol 'IPreviewHandler' in function HB_FUN_ADDPREVIEWC
Error E2188 test.prg 153: Expression syntax in function HB_FUN_ADDPREVIEWC
Error E2140 test.prg 160: Declaration is not allowed here in function HB_FUN_ADDPREVIEWC
Error E2140 test.prg 161: Declaration is not allowed here in function HB_FUN_ADDPREVIEWC
Error E2140 test.prg 162: Declaration is not allowed here in function HB_FUN_ADDPREVIEWC
Error E2451 test.prg 163: Undefined symbol 'IInitializeWithFile' in function HB_FUN_ADDPREVIEWC
Error E2451 test.prg 164: Undefined symbol 'IInitializeWithStream' in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 173: Call to function 'IPreviewHandler_QueryInterface' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 174: Call to function 'IPreviewHandler_QueryInterface' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 179: Call to function 'IPreviewHandler_Unload' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 186: Call to function 'IInitializeWithFile_Initialize' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 203: Call to function 'IInitializeWithStream_Initialize' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 211: Call to function 'hb_parvni' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 212: Call to function 'hb_parvni' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 213: Call to function 'hb_parvni' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 214: Call to function 'hb_parvni' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 216: Call to function 'IPreviewHandler_SetWindow' with no prototype in function HB_FUN_ADDPREVIEWC
Warning W8065 test.prg 217: Call to function 'IPreviewHandler_DoPreview' with no prototype in function HB_FUN_ADDPREVIEWC
Error E2451 test.prg 225: Undefined symbol 'IPreviewHandler' in function HB_FUN_UnloadPreviewC
Error E2188 test.prg 225: Expression syntax in function HB_FUN_UnloadPreviewC
Warning W8065 test.prg 231: Call to function 'IPreviewHandler_Unload' with no prototype in function HB_FUN_UnloadPreviewC
*** 11 errors in Compile ***
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
Re: Preview of a file
Silvio ,are errors of a different kind.
1.- 'hb_parvni' with no prototype
Xharbour not prototipe hb_parvni I think its equivalent is hb_parni ( I'm not sure )
2.- Unable to open include file 'Shextra.h'
missing header file that I created to work in bcc582 ..
http://forums.fivetechsupport.com/viewt ... 15#p179276
Here's the file. Place it in your include dir in bcc582.
once you made these changes tell me if there are more errors.
1.- 'hb_parvni' with no prototype
Xharbour not prototipe hb_parvni I think its equivalent is hb_parni ( I'm not sure )
2.- Unable to open include file 'Shextra.h'
missing header file that I created to work in bcc582 ..
http://forums.fivetechsupport.com/viewt ... 15#p179276
Here's the file. Place it in your include dir in bcc582.
once you made these changes tell me if there are more errors.
- Silvio.Falconi
- Posts: 4956
- Joined: Thu Oct 18, 2012 7:17 pm
Re: Preview of a file
strange I link file.h into compilation
do you use harbour ?
do you use harbour ?
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
- Silvio.Falconi
- Posts: 4956
- Joined: Thu Oct 18, 2012 7:17 pm
Re: Preview of a file
sorry Now run ok
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC