EDK SDK confusion - c++

At work we have a third party library we use called "MAPI LIB". It is version 1.0. I think this came with a very very old version of the Windows Platform SDK. It has libraries like EDKDEBUG.LIB and which I can't find in any platform SDK installed with VS2003, VS2005, or VS2008. This seems like a VC6 thing. For example, one of the symbols in these libraries is IID_IMessage which I can't find in any of my VS2005 platform SDK libs.
Basically our application uses these LIB files to communicate with an Exchange server. The bad thing is that these libs force the inclusion of VC6 related MFC libraries (e.g. MFC4.LIB also from VC6), so I can't really use them.
Why aren't these libs in the more recent versions of the Platform SDK for Windows? Where can I find these libs? Exchange is still here today, so I find it odd that C++ API support for MAPI has been dropped from IDE's after VC6.

Download MFCMAPI - http://mfcmapi.codeplex.com/ - to see how MAPI functions and interfaces need to be linked.

Related

How many versions of Windows C runtime libraries may be used at once?

I want to bundle my app for Windows. So I use windowsdeployqt to create a folder containing my app with its dependent libs. I extract the contents of vc_redist.x64.exe there, so I have runtime CRT dlls (C/C++ runtime libs) there.
But then I also put libssl and libcrypto dlls there (I simply downloaded them from the web). But they also depend on CRT dlls.
I try to understand if the crypto libs will use my CRT dlls (C library) or them of the system? Probably, mine, because as far as I understand an app cannot use various CRT dlls (of different versions I mean) at once, can it?
Is there any way to see what is used during the app's runtime (like gdb's info sharedlib), maybe?
Also, I am kinda not sure -- it looks like the crypto libs do not care of the CRT libs version. Because there is a common openssl installer on the web and you can install it on your Windows 7, windows 10, etc or just having different CRT libs in your system, or (I hope) it can use the CRT provided by my bundle. How can this be that openssl does not care of the version of C runtime lib?
Thank you for attention!

Does the C++ std library have some more environmental-dependencies than the winAPI?

I know the win API is the ground-floor thing in Windows. When a computer has a Windows system installed, so long as the system version matches the API requirement, API functions can work.
But, for example, .NET requires the .NET framework to be installed, so it has more environmental-dependencies.
Then, does the C++ std library require something like the framework, or is the required thing already pre-installed in almost every computer?
Normally yes, on Windows the C++ std library is a DLL, and no it's not part of Windows.
In case of Visual C++ you need a corresponding Visual C++ Redistributable package, which will install files like MSVCP140.DLL etc.
MinGW uses GCC/libstdc++ DLLs like libgcc_s_dw2-1.dll, libstdc++-6.dll, etc.
If you want to avoid having to install these files, there's often an option to link your program statically (e.g. /MT for VC++ and -static for MinGW), in which case the needed CRT parts will be embedded inside your binary/executable (at the expense of its size and security patches lifecycle).

How to package d3dx9_43.dll in to my application?

I have made a small game which I need to take in to a school to carry out some testing.
Unfortunately, being a school system, I will need to package all DLLs not already installed so that it will run. Installing anything on the computers is out of the question. When I went down a few days ago I noticed that the application would not start up due to a missing d3dx9_43.dll file.
I have statically linked the libraries I have used and am confused as to why this wasn't included. I referenced all the Direct3D 9 libraries I used (or so I thought).
Can anyone help me out?
I am using Visual Studio C++ 2010 and used Direct3D 9.
The only option that abides by the license is to install the redistributable package.
Earlier versions of D3DX did support static linking, but for reasons of security MS changed the rules to ban static linking. They wanted to be able to service these DLLs through WIndows Update and that's only possible if they are installed using the official redistributable package.
One possible option for you is to see if you can avoid linking to D3DX. It may be that you use a small enough footprint of that library that you can bypass it.
It's supposed to be done by including the DirectX 9.0 Redistributable package inside the application installer, but since you can't install anything you either have to ship all the dll with your executable (which is against the SDK license) or statically link against the DirectX runtime (which is also probably not allowed).
Statically link against the DirectX runtime is not a good idea and is not as trivial as it seems, I'm not even sure it's possibe but you must have to have the actual static libraries (not the one that are actually linked by themselves against the dll).
So the easiest solution would be to keep all the needed DLL with the exe, if you're worried about missing one dependency you can use the Dependency Walker. Note that this solution is not allowed by the SDK license and cannot be used to actually distribute an application to the final users.

Sample code for Anymote in C++ version?

Can anyone tell me where to find the resource just like this one
(But I hope this is for C++ !!)
There is a dynamic library under google tv chrome extersion here
This hyperlink tells us how to go Anymote by call C++ libraries through NPAPI under javascript.
Maybe I can follow this page to go under C++ version.
Unfortunately, the arch of these libraries is i386 (or x86_64).
My project build under the other platform (ex: arm), so I can't call these libraries directly. Orz
There is a cpp Anymote library implementation and some unittests which exercise the library APIs at:
http://code.google.com/p/anymote-protocol/source/browse/#hg%2Fcpp
Apart from that there is no open source Anymote client library in C++.

Move C++ app with Boost from Linux to Windows with Visual Studio 6

I made a small program with Boost in Linux 2 yrs ago. Now I want to make it work in Windows. I found there are few .a files in my libs folder. I am wondering how to make it works in Windows? do I need to build Boost in Windows to get library or I can download somewhere? I am using Visual Studio 6.
Yes, you'll need to recompile for different platforms. Coincidentally, I posted instructions on this not long ago.
I hugely recommend you do not use Visual Studio 6. It's very dated, and terribly non-conforming. You can get the newer versions for free, as Express. You won't be missing anything.
Many boost libraries are header-only, you don't need to link against anything to use them. Libraries such as boost::filesystem require you to build libs appropriate for your platform and link against them.
Precompiled boost for MSVC7,8,9 can be found here (in the hope that you follow GMan's advice and get rid of VS6 …)
.a files from Unix are like .lib files in Windows. They will not work, and there is no way of "converting" them, short of using a compiler on the original source code.
However, Boost does build on Windows. Just download it (or more likely, the closest version you can find to the one your code was using).
Older versions of Boost did work under VS6, but with a whole lot of stuff disabled (VS6 really just barely qualified as a C++ compiler). If you can, I highly suggest you use a newer version of Visual Studio.
You have a few options. Building Boost will give you the greatest flexibility in working with your application and boost libraries. However, you can download pre-built Boost libraries wrapped up in a nice windows installer here, Boost Packages
But one thing to keep in mind, depending on what you used in Boost, a lot of it is template based so no libraries are required. If you're only using some templatized portions, you don't need to worry about any of this. Just make sure you have boost in your include path when building.
As a side note, you can get free but limited versions of newer MS compilers here: http ://www.microsoft.com/exPress/