C++/CLI : IntPtr to an HWND

I was fed up with always having to write different code for x86 or x64 so I wrote intptr_cast<>.

Still a lot of things to think about here but I wrote those couple of lines as a sample.

I thought this might not only give you ideas but maybe trigger some comments:

// Cheap static_assert

template <bool> class static_assert;

template <> class static_assert<true> {};


template <typename T>

T intptr_cast(System::IntPtr intPtr) {

   static_assert< sizeof(T) == sizeof(void *) >();

   return reinterpret_cast<T>(intPtr.ToPointer());


(10/15/2007: I changed the code above to use ToPointer())




And a code sample on how to use this: 


void Cache::Pin(array<String ^> ^ pathsToPin, PinningBehaviour pinningBehaviour, bool pinSubdirectories, bool asynchronously, IntPtr parentWindow ) {

   LastPinningEventRaised = LastEventRaised::None;

   const wchar_t * * paths = NULL;

   try {

      paths = ConstructSingleNativeBuffer(pathsToPin);


      if (!_pinningProgress) {

         _pinningProgress = new Progress(this, ProgressSource::Pinning);









                      safe_cast<IOfflineFilesSyncProgress *>(_pinningProgress)));

   } finally {

      delete [] paths;




Of course, you could use this for HBRUSH, HPEN, HANDLE, …


May the force be with you.

Comments (0)