473,396 Members | 1,871 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

32 vs 64 bit

Hi there,

Given the following in Win32

[DllImport("User32.dll")]
internal static extern Int32 SendMessage(IntPtr hWnd, UInt32 Msg, UInt32
wParam, Int32 lParam);

the return value and last two parameters then become the following in Win64:

[DllImport("User32.dll")]
internal static extern Int64 SendMessage(IntPtr hWnd, UInt32 Msg, UInt64
wParam, Int64 lParam);

How would you then declare this in code so that it works in both
environments. Do I have to #define my own WIN32 constant for instance and do
a conditional compile or is there a more mainstream way. Note that if I do
the latter then won't this conflict with the /platform compiler option
(assuming it's set to "anycpu"). Any insight would be welcome. Thanks.
May 10 '07 #1
3 5101
Mark,

You would use the IntPtr struct, not the int32 or int64 structures. The
IntPtr will be sized according to the platform it is on (32 or 64 bit).

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Mark Chambers" <no_spam@_nospam.comwrote in message
news:OD**************@TK2MSFTNGP06.phx.gbl...
Hi there,

Given the following in Win32

[DllImport("User32.dll")]
internal static extern Int32 SendMessage(IntPtr hWnd, UInt32 Msg, UInt32
wParam, Int32 lParam);

the return value and last two parameters then become the following in
Win64:

[DllImport("User32.dll")]
internal static extern Int64 SendMessage(IntPtr hWnd, UInt32 Msg, UInt64
wParam, Int64 lParam);

How would you then declare this in code so that it works in both
environments. Do I have to #define my own WIN32 constant for instance and
do a conditional compile or is there a more mainstream way. Note that if I
do the latter then won't this conflict with the /platform compiler option
(assuming it's set to "anycpu"). Any insight would be welcome. Thanks.

May 10 '07 #2
You would use the IntPtr struct, not the int32 or int64 structures.
The IntPtr will be sized according to the platform it is on (32 or 64
bit).
Ok, thanks. I'll have to read up on this in more detail. The docs on this
structure imply that it's used for pointers and handles. Presumably you can
pass around any 32 or 64 value but I'll have find some info on the proper
marshalling mechanics. I'm also still confused on the precise rules for
prototyping Win32 functions in .NET. I've been trying to prescisely match
the Win32 types to their corresponding .NET types as seen below but I find
examples where the rules are loosely applied even by MSFT. They sometimes
use "int" where a "uint" is (technically) required, "bool" where an "int"
is required (e.g., Win32 functions returning TRUE or FALSE which are
actually 32 bit integers), etc. You can apparently pass a "string" to a
function taking an LPCTSTR, "StringBuilder" for in-out string paramters,
etc. Where are all the rules spelled out however (for instance, do you have
to explicitily NULL terminate these strings, pre-allocate their size for out
strings, etc.). Do you know of any good links.
May 10 '07 #3
Mark,

I would start with the section of the MSDN documentation titled "Interop
Marshaling", located at:

http://msdn2.microsoft.com/en-us/library/04fy9ya1.aspx
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Mark Chambers" <no_spam@_nospam.comwrote in message
news:uT**************@TK2MSFTNGP06.phx.gbl...
> You would use the IntPtr struct, not the int32 or int64 structures.
The IntPtr will be sized according to the platform it is on (32 or 64
bit).

Ok, thanks. I'll have to read up on this in more detail. The docs on this
structure imply that it's used for pointers and handles. Presumably you
can pass around any 32 or 64 value but I'll have find some info on the
proper marshalling mechanics. I'm also still confused on the precise rules
for prototyping Win32 functions in .NET. I've been trying to prescisely
match the Win32 types to their corresponding .NET types as seen below but
I find examples where the rules are loosely applied even by MSFT. They
sometimes use "int" where a "uint" is (technically) required, "bool"
where an "int" is required (e.g., Win32 functions returning TRUE or FALSE
which are actually 32 bit integers), etc. You can apparently pass a
"string" to a function taking an LPCTSTR, "StringBuilder" for in-out
string paramters, etc. Where are all the rules spelled out however (for
instance, do you have to explicitily NULL terminate these strings,
pre-allocate their size for out strings, etc.). Do you know of any good
links.

May 10 '07 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: William C. White | last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using cURL? Our website is hosted on a shared drive and the webhost company doesn't installed additional software (such as cURL)...
2
by: Albert Ahtenberg | last post by:
Hello, I don't know if it is only me but I was sure that header("Location:url") redirects the browser instantly to URL, or at least stops the execution of the code. But appearantely it continues...
3
by: James | last post by:
Hi, I have a form with 2 fields. 'A' 'B' The user completes one of the fields and the form is submitted. On the results page I want to run a query, but this will change subject to which...
0
by: Ollivier Robert | last post by:
Hello, I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9 system. The link succeeds but everytime I try to run php, I get a SEGV from inside the libcnltsh.so library. ...
1
by: Richard Galli | last post by:
I want viewers to compare state laws on a single subject. Imagine a three-column table with a drop-down box on the top. A viewer selects a state from the list, and that state's text fills the...
4
by: Albert Ahtenberg | last post by:
Hello, I have two questions. 1. When the user presses the back button and returns to a form he filled the form is reseted. How do I leave there the values he inserted? 2. When the...
1
by: inderjit S Gabrie | last post by:
Hi all Here is the scenerio ...is it possibly to do this... i am getting valid course dates output on to a web which i have designed ....all is okay so far , look at the following web url ...
2
by: Jack | last post by:
Hi All, What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g. select x from y where z=:parameter Which in asp/jsp would be followed by some statements to bind a value...
3
by: Sandwick | last post by:
I am trying to change the size of a drawing so they are all 3x3. the script below is what i was trying to use to cut it in half ... I get errors. I can display the normal picture but not the...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.