VisualCpp.org Collection of Visual C++ Stuffs

18Mar/080

Missing IContextMenu ?

I am building a shell extension project in VS2005 IDE which is converted from VC++ 6.0. During buid I am getting the following error
"error C2787: 'IContextMenu' : no GUID has been associated
with this object"
, but The same project works fine in VC++ 6.0.

Doug Harrison (VC++ MVP) responded to query and solved it in one go!, following was his reply

"

This is interesting. There are two <comdef.h> header files in VC.NET, one in
Vc7/include and the other in Vc7/PlatformSDK/include. The former splits off
the smart pointer typedefs into comdefsp.h, and it doesn't include
IContextMenu. The latter does. You can try to #include the PlatformSDK
header directly, change your INCLUDE path order, or supply the missing
typedef yourself, e.g.

struct __declspec(uuid("000214e4-0000-0000-c000-000000000046"))
IContextMenu;

_COM_SMARTPTR_TYPEDEF(IContextMenu, __uuidof(IContextMenu));

"

Filed under: COM/ATL, General No Comments
16Mar/08Off

How to launch Windows Picture and Fax Viewer programmatically?

My fellow cpian Rajesh R Subramanian in codeproject visual c++ forums answer this question, here what he replied for above question :-

The code which does the stuff is within shimgvw.dll. try ShellExecute() with "open", and pass this as the path

rundll32.exe C:\WINDOWS\System32\shimgvw.dll, ImageView_Fullscreen C:\\myimage.jpg

Filed under: General Comments Off
14Mar/080

How to identify the architecture of given binary file?

Sometimes programmer requires to know the architecture of binary file, i.e. it's belong to x32 architecture or x64 architecture. recently at codeproject(My Fav programmer site), Randor , has replied to this query, here he created a small function, that could help you to determine the architecture of app! :-


DWORD GetPEMachineType(LPTSTR sz)
{
  HANDLE hFile = CreateFile(sz,GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
  if(NULL != hFile)
  {
  LARGE_INTEGER bigInt;
  BOOL diditWork = GetFileSizeEx(hFile, &bigInt);
  HANDLE hFileMap = CreateFileMapping(hFile,
  NULL,
  PAGE_READWRITE,
  bigInt.HighPart,
  bigInt.LowPart + 0x2000 ,
  _T("someGUID"));
if(NULL != hFileMap)
  {
 LPVOID hMap = MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
if(NULL != hMap)
  {
  HMODULE hModule = (HMODULE)hMap;
  IMAGE_DOS_HEADER * pDosHeader = (IMAGE_DOS_HEADER *)hModule;
  IMAGE_FILE_HEADER * pFileHeader = (IMAGE_FILE_HEADER *)(((LPBYTE)hModule)
  + pDosHeader->e_lfanew +
  sizeof(IMAGE_NT_SIGNATURE));
return pFileHeader->Machine;
  }
  }
 }
}

and possible returns could be

Constant Name Original Value Description
  IMAGE_FILE_MACHINE_UNKNOWN   0x0   The contents of this field are assumed to be applicable to any machine type
  IMAGE_FILE_MACHINE_AM33     0x1d3     Matsushita AM33 IMAGE_FILE_MACHINE_AMD64 0x8664 x64
  IMAGE_FILE_MACHINE_ARM   0x1c0     ARM little endian
  IMAGE_FILE_MACHINE_EBC   0xebc     EFI byte code
  IMAGE_FILE_MACHINE_I386   0x14c     Intel 386 or later processors and compatible processors
  IMAGE_FILE_MACHINE_IA64   0x200     Intel Itanium processor family
   IMAGE_FILE_MACHINE_M32R   0x9041     Mitsubishi M32R little endian
  IMAGE_FILE_MACHINE_MIPS16   0x266     MIPS16
  IMAGE_FILE_MACHINE_MIPSFPU   0x366     MIPS with FPU
  IMAGE_FILE_MACHINE_MIPSFPU16     0x466     MIPS16 with FPU
  IMAGE_FILE_MACHINE_POWERPC   0x1f0     Power PC little endian
  IMAGE_FILE_MACHINE_POWERPCFP   0x1f1     Power PC with floating point support
  IMAGE_FILE_MACHINE_R4000   0x166     MIPS little endian
  IMAGE_FILE_MACHINE_SH3   0x1a2     Hitachi SH3
  IMAGE_FILE_MACHINE_SH3DSP   0x1a3     Hitachi SH3 DSP  
  IMAGE_FILE_MACHINE_SH4   0x1a6     Hitachi SH4
  IMAGE_FILE_MACHINE_SH5     0x1a8     Hitachi SH5
  IMAGE_FILE_MACHINE_THUMB   0x1c2     Thumb
  IMAGE_FILE_MACHINE_WCEMIPSV2   0x169      MIPS little-endian WCE v2

Also there is one more function in ImageHlp library which is do above task :- MapAndLoad

Filed under: General, MFC, System No Comments