Custom Controls on x64

L

Leslie

I have developed a Windows Forms Control (WFC) which is used in a web page.
The control is developed in C# using the 2.0 framework and the control
invokes a dll that is written in C++. I reference the WFC using the following
syntax:
<object id="SmsInfo" height="1" width="1"
classid="http:SmsInfo.dll#SmsInfo.GetSmsInfo" >
The control then makes calls to C++ dll. Everything works great in 32 bit.
However, I would like to provide 64 bit support.
If the user browses to my web site using the x64 version of IE do I need a
different version of my custom WFC or will the C# WFC work correctly using
the x64 version of the 2.0 framework?

Secondly, I will need to compile an x64 version of my C++ dll. How will the
browser (and my WFC) know which version of the dll to use? Will I need to
build two seperate versions of the WFC and reference the x64 or x32 version
specifically in each version of the WFC? Other than the x64 or x32
reference, the WFC should be identical in both versions.

thanks,

Leslie
Leslie
 
W

Walter Wang [MSFT]

Hi Leslie,

Based on my understanding, you should be able to compile your C# Windows
Forms control library using targetd platform "AnyCPU". This is the also
default platform type, assemblied compiled in this way is process
independent. If it's executed or loaded by 32-bit os or host process, it
will be JIT(just-in-time) compiled as 32-bit native code; and the same for
64-bit.

For your C++ DLL, you have to compile two versions, one for 32-bit, will be
installed to %windir%\syswow64 on 64-bit os, installed to %windir%\system32
on 32-bit os. For 64-bit version, install to %windir%\system32.

Hope this helps.


Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
L

Leslie

Walter,

Thanks for your help. I believe I understand the approach for the C# code,
and that should work well. Currently the C++ DLL is downloaded from the web
site as needed. Is there no way to make that approach continue to work in the
mixed 32 bit and 64 bit environments?

Thanks,

Leslie
 
W

Walter Wang [MSFT]

Hi Leslie,

Sorry for the delay. I was not in office last Friday.

This is a quick note to let you know that I am performing research on this
issue and will get back to you as soon as possible. I appreciate your
patience.


Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
W

Walter Wang [MSFT]

Hi Leslie,

I was wondering how's currently you're download the C++ DLL and where is it
installed to?

There's one possible solution to this is to use dynamic P/Invoke to load
different versions of the DLL according to 32-bit or 64-bit environment
that the control is running in. You can determine this by checking
IntPtr.Size, if it's equal to 4, it's 32-bit, if it's equal to 8, it's
64-bit.

#Junfeng Zhang's Windows Programming Notes : Dynamic PInvoke
http://blogs.msdn.com/junfeng/archive/2004/07/14/181932.aspx


Please feel free to let me know if there's anything unclear. Thanks.


Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
L

Leslie

Currently I have a Windows Forms Control which is downloaded to the client
browser. The WFC uses the C++ dll. The reference that the C# control holds on
the C++ dll includes the property of "Copy Local=True". When the WFC is
downloaded, the C++ dll is downloaded as well.

Thanks for your help.

Leslie
 
W

Walter Wang [MSFT]

Hi Leslie,

So the C++ dll is a managed assembly built with C++/CLI, right? If this is
the case, you can try to use /clr:safe switch to generate safe IL code of
the C++ managed assembly. In this case, the generated IL code is also
processor independent, which means it will also be JIT compiled as 32-bit
or 64-bit native code according to the host process.

I have a related discussion here for your reference:

http://msdn.microsoft.com/newsgroups/managed/default.aspx?dg=microsoft.publi
c.dotnet.framework.windowsforms.controls&tid=6e96ebc9-5507-425a-a27b-0950d94
a3584&m=1&p=1

Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
L

Leslie

Walter,

This is good to know. Thanks very much for the additional information.

Leslie
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,228
Members
46,818
Latest member
SapanaCarpetStudio

Latest Threads

Top