IntPtr in 64 bit mode

This forum is meant for questions and discussions about the X# language and tools
Post Reply
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

IntPtr in 64 bit mode

Post by wriedmann »

Hi Chris or Robert,

a stupid question. This code found in the bBrowser sourcecode

Code: Select all

sEditStream:dwCookie := dword(_cast, GCHandle.ToIntPtr(ogchSELF))
should be not a bigger problem in a 32 bit application.
But what is in a 64 bit application?
A dword is always 32 bit, but the IntPtr() is 64 bit, so this code would not work, and thanks to the cast the compiler will not complain.
But maybe I'm totally wrong with my assumption....

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
robert
Posts: 4225
Joined: Fri Aug 21, 2015 10:57 am
Location: Netherlands

IntPtr in 64 bit mode

Post by robert »

Wolfgang,
You're absolutely right. This will not work.
In general you should avoid all _CAST operations in your code, unless you really know what you are doing.
If you look at the windows SDK header files then this field in the editStream structure is declared as a DWORD_PTR:

Code: Select all

typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);

typedef struct _editstream
{
	DWORD_PTR dwCookie;		// User value passed to callback as first parameter 
	DWORD	  dwError;		// Last error 
	EDITSTREAMCALLBACK pfnCallback;
} EDITSTREAM;
The type DWORD_PTR has a different size depending on the compilation options:

in 32 bits mode:

Code: Select all

typedef unsigned long DWORD_PTR, *PDWORD_PTR;
in 64 bits mode:

Code: Select all

typedef unsigned __int64 DWORD_PTR, *PDWORD_PTR;

Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
User avatar
Chris
Posts: 4562
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

IntPtr in 64 bit mode

Post by Chris »

Just to add a bit, I think (without investigating this too much) the whole VOSDK makes so many assumptions about being run in 32bit, making it practically too difficult to run it in AnyCPU/x64, so most likely this is not really an issue in bBrowser either, as it is using the VOSDK, so also has to run in 32bit mode. But, yeah, as a general practice, this is not good.
Chris Pyrgas

XSharp Development Team test
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

IntPtr in 64 bit mode

Post by wriedmann »

Hi Robert, hi Chris,

thank you for the confirmation!

So my conclusion is that no application using the VO GUI classes will be able to run in AnyCPU mode.

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Chris
Posts: 4562
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

IntPtr in 64 bit mode

Post by Chris »

Hi Wolfgang,

I think so at least. Could be worth giving it a try though, to see how many changes are required to make it work in 64 bit. Something for the (not too far) future...

Chris
Chris Pyrgas

XSharp Development Team test
chris(at)xsharp.eu
Post Reply