Compiling in Visual C++ 2005 - c++

I wrote a C++ DLL and it has been compiled. It requires Visual C++ 2010. How can I compile it for Visual C++ 2005, and will it work for Windows XP, Windows Vista, Windows 7?
My DLL uses detours 1.5 and windows sockets. I use Visual Studio 2010.

I guess you need to install Visual C++ 2005 on the same machine, and read this article:
http://weblogs.asp.net/israelio/archive/2009/10/20/enable-vs-2010-multi-targeting-also-for-vs2005-c.aspx
(I have used multi targeting of VS 2010 only for the VS 2008 tool chain, but with the patch above it should work in a similar manner).

Related

Difference between Microsoft Visual C++ 2010 x64 cross tools vs MSVC++ redistributable

To use intel fortran in windows environment with other commercial software package, pre-requisite is to have Microsoft Visual C++:
Microsoft Visual C++ 2010 x64 cross tools
If I check my installed programs, I see that "Microsoft Visual C++ 2010 x64 redistributable 10.0.40219"
Is "Microsoft Visual C++ 2010 x64 redistributable 10.0.40219" different from "Microsoft Visual C++ 2010 x64 cross tools"?
Over the web, I read that to have Microsoft Visual C++ 2010 x64 cross tools, I need to install MS visual studio 2010.
Do I have to purchase MS visual studio to have "Microsoft Visual C++ 2010 x64 cross tools" ?
So I am confused !
Thanks in advance for your prompt response !
Redistributables are just the libraries you are permitted to install to get msvc built applications to run on the client system.
It is not the same as having msvc 2010 installed on a system.
Things with different names are generally different things, even if part of the name is similar.

C++ - Compiling for windows XP SP1 using Visual Studio 2013

I have a project written in Visual Studio 2013.
We need to compile it somehow to work in Windows XP SP1
What do you suggest?
It's possible (but not preferable) to migrate it to VS2012.
The project works with statically linking with the CRT. We prefer to leave it that way.

Which XP version does Visual Studio 2012 supports [As Target OS]

Which version of windows XP does Visual Studio 2012 supports.
[Edit: Which version does VS12 supports compiling to]
I found this article:
http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx
That states that it supports XP SP3. But I didn't find any information for VS12 update 4.
Also, If the code I compile using VS12 doesn't crush on XP SP2 and seems to work.
Is it safe to use it? why not?
Thanks
It's correct, Visual Studio 2012 can compile binaries compatible with Windows XP SP3.
You need to install the Platform Toolset v110_xp and select it in the general configuration properties of your project.
If "safe" means that it works the answere is yes. We have 12.000 installations of our software compiled with Visual Studio 2012 (and recently Visual Studio 2013) perfectly working on Windows XP SP3.
The only big problem is run time debugging: you can't install Visual Studio 2012 on Windows XP so it could be a problem to find bugs that accidentally happens only on Windows XP.

Visual C++11 executables and Windows XP [duplicate]

I compile my C++ source code with Visual Studio 11 Developer Preview. I statically link to the runtime library.
The resulting executable cannot be executed on Windows XP. When I try to execute it on Windows XP I get the error message "[Executable Path] is not a valid Win32 Application.".
According to Microsoft Visual Studio 11 won't support Windows XP.
How does it work that the resulting executable cannot be executed on Windows XP? Is there anything special within the executable?
They seem to drop support for older systems in every new release of VS (NT4,2000,XP) Even if you don't use the CRT at all, they still force the PE subsystem version to high numbers. You can work around that by changing the numbers back to 5.0 in a post build step. Just changing those numbers should allow the exe to start on XP unless the new CRT is using WinAPI functions that don't exist on XP.
The other alternative if you want to keep using VS11 is to use multi-targeting and older compilers...
Visual Studio 2012 will be able to target Windows XP later in 2012:
Targeting Windows XP with C++ in Visual Studio 2012
"Later this fall, Microsoft will provide an update to Visual Studio 2012 that will enable C++ applications to target Windows XP. This update will make the necessary modifications to the Visual C++ 2012 compiler, runtime, and libraries to enable developers to create applications and DLLs that run on Windows XP and higher versions as well as Windows Server 2003 and higher."
Edit: This has now happened (phew!)
The workaround is to use a different Platform Toolset, which will link a different version of CRT and produce binaries compatible to older operating systems.
See more here: Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries.
With v90 toolset your binary will be able to run even in older systems, such as Windows 2000.
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png
The runtime libraries bundled with VS 2010 and higher enforce your executable to import two new functions from kernel32.dll that are missing on Windows XP: EncodePointer and DecodePointer. Those are needed for yet another idiotic naive attempt to enhance the software "security".
In VS 2010 there is an option to use the runtime libraries of Visual Studio 2008, which solves this problem. I don't know if there's such an option in later versions of VS.

What is special about the executables compiled with Visual Studio 11 which results in that the executables cannot be executed on Windows XP?

I compile my C++ source code with Visual Studio 11 Developer Preview. I statically link to the runtime library.
The resulting executable cannot be executed on Windows XP. When I try to execute it on Windows XP I get the error message "[Executable Path] is not a valid Win32 Application.".
According to Microsoft Visual Studio 11 won't support Windows XP.
How does it work that the resulting executable cannot be executed on Windows XP? Is there anything special within the executable?
They seem to drop support for older systems in every new release of VS (NT4,2000,XP) Even if you don't use the CRT at all, they still force the PE subsystem version to high numbers. You can work around that by changing the numbers back to 5.0 in a post build step. Just changing those numbers should allow the exe to start on XP unless the new CRT is using WinAPI functions that don't exist on XP.
The other alternative if you want to keep using VS11 is to use multi-targeting and older compilers...
Visual Studio 2012 will be able to target Windows XP later in 2012:
Targeting Windows XP with C++ in Visual Studio 2012
"Later this fall, Microsoft will provide an update to Visual Studio 2012 that will enable C++ applications to target Windows XP. This update will make the necessary modifications to the Visual C++ 2012 compiler, runtime, and libraries to enable developers to create applications and DLLs that run on Windows XP and higher versions as well as Windows Server 2003 and higher."
Edit: This has now happened (phew!)
The workaround is to use a different Platform Toolset, which will link a different version of CRT and produce binaries compatible to older operating systems.
See more here: Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries.
With v90 toolset your binary will be able to run even in older systems, such as Windows 2000.
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png
The runtime libraries bundled with VS 2010 and higher enforce your executable to import two new functions from kernel32.dll that are missing on Windows XP: EncodePointer and DecodePointer. Those are needed for yet another idiotic naive attempt to enhance the software "security".
In VS 2010 there is an option to use the runtime libraries of Visual Studio 2008, which solves this problem. I don't know if there's such an option in later versions of VS.