Entry point for C++/CLI x64 WindowsForms App (VS 2015) - c++-cli

I have the same problem as the user in Visual Studio 2015 c++/CLI boost::thread : If I use boost, Windows Forms and C++/Cli together, my app crashes on startup.
The proposed solution works for me (change Subsystem to Console); the only small disadvantage is that the console is started alongside the GUI.
There is another solution I've found (see https://bytes.com/topic/net/answers/642179-c-cli-winforms-app-native-static-library-singletons-cra) : Changing the entry point to "?mainCRTStartupStrArray##$$FYMHP$01AP$AAVString#System###Z".
However this only works when compiling for 32 bit; for 64 bit the symbol cannot be resolved.
My questions:
Is there a similar symbol that works for x64 as well?
How could one find these kind of symbols? I tried to locate them via dumpbin but with no success!

Ah, light at the end of the tunnel for this nasty ignored problem. You can find the correct mangled name by grepping the .lib files in vc/lib/amd64. Out pops msvcmrt.lib, the name is:
?mainCRTStartupStrArray##$$FYMHP$01EAPE$AAVString#System###Z
Bit of a bug in the mangling algorithm btw, it shouldn't have added the extra E's because these are managed identifiers. Links and runs fine, I haven't tested yet if it solves the static initialization order fiasco problem. It is promising.

Related

How to get VB.NET for Mono set up?

I'm trying to get a Mono development environment set up on a Windows box. Basic install was dead simple, but I'd like to get the VB.NET compiler set up. Only problem is, there doesn't seem to be an installer for it. The official page on VB.NET support implies that there should be, but there isn't; it hasn't been incorporated into the main installer, either. I can download the source package from the mono-basic Github, but since the compiler is self-hosting, that just leaves me in a catch-22 situation where I need the compiler to compile the compiler... :/ On top of which, it doesn't look like the compiler code has been touched in a couple years...is this still supported? Is there any way to get it set up apart from doing a build from source on a machine with the official VS toolchain (or a Linux box with the package installed from a repository) and then copying it over?

LWIP library files not building on Atmel 7.0 when setting NO_SYS=1

I've got a strange question that I can't seem to find any answers for. I'm building a quite simple application for sending/receving data from/to a PCB, and the application itself builds, but when I exited Atmel Studio (Version 7.0) and reopened the project, the library files no longer built. At least that's what I think happened. I didn't change any code between building the project before and after restart of the program. It has happened before, and that time I solved it by creating the project from scratch, but I'd really like that not to be the only solution. I've also tried restarting the program again, as well as the computer. I also removed and re-added the library.
Has anyone encountered the same issue? If so, any help in the right direction would be greatly appreciated. Information on my system and error messages below:
I'm building for the ATSAMV71N21B board, with Atmel Studio 7.0. I've imported the lwip library trough the ASF wizard, and these files built before the program restart.
These are the files that won't build:
The 122 build errors mainly consists of "expected expression before 'struct'" and undeclared functions and variables, even though these clearly are defined in the various files in the library.
It ended up being because of my NO_SYS setting being 1. When I switched it to 0, everything built, (except for sys_check_timeouts(), but I think I'll find another answer for this). Keeping this here for reference if anyone needs it one day.

WINCE problem LoadLibraryEx

I am using a WINCE framework for development called WINDEV.
This framework has some DLLs that are to be loaded, but on some WINCE platforms, the loading (tested with a c program with the LoadLibraryEx instruction) does not work ....
The results vary from one platform to another ....
What are the hypothesis to be checked ?
Thank for your help.
What does exactly mean "does not work"?
According to MSDN, LoadLibraryEx on failure returns NULL, and "To get extended error information, call GetLastError."
Some ideas:
- is the DLL you are trying to load in the same directory of the executable?
- is the DLL a valid Windows CE binary?
- does LoadLibraryEx work if you try to load some known system DLL?
Sorry, without more details I cannot think of anything more.
Since Windows CE is a modular OS not all Windows CE platforms include all the components. It might be that your Dll is dependent on one of these components and thus fails to load.
As Benedetto suggested, get the last error and add the information to the question.
You can also use DependencyWalker to see what Dlls your library depends on so you can check whether they are available on the non cooperatives platforms.

How to fix DWMAPI.DLL delay-load dependency under WinXP?

I have built a .dll under WinXP that claims it can't find DWMAPI.DLL when it's loaded. The problem is that this DLL is a Vista DLL, and this a known issue for XP users that have IE7 installed. The recommendation is to uninstall IE7 or repair the .NET Framework via Add/Remove programs. I did the repair, and nothing changed. I'm not about to uninstall IE7 since there must be a better solution that's not the equivalent of "reinstall windows".
I've read bad things about people who attempted to uninstall IE7, so I'm reluctant to go that route.
I am using C++ under Visual Studio 2003 (7.1). I don't see an option where I may have forced delay loading at application launch. I just used default settings when I created the DLL project. I did just now find an interesting option, Linker->Input->Delay Loaded DLLs, so I put DWMAPI.DLL in there to force it to be delay-loaded. However, I get this when linking:
LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll
.. and it of course didn't change a thing when trying to load my DLL. For the heck of it, I added the whole tree of DLLs that lead to DWMAPI.DLL, and I get the same message. (For the record, it's foundation.dll->shell32.dll->shdocvw.dll->mshtml.dll->ieframe.dll->dwmapi.dll .)
To be more specific about what I'm doing, I am writing a Maya plugin and get the always-helpful text in the script editor:
// Error: Unable to dynamically load : D:/blahblahblah/mydll.mll
The specified module could not be found.
//
// Error: The operation completed successfully.
//
// Error: The operation completed successfully.
(mydll) //
I used Dependency Walker to initially track down the problem, and that's what lead me to DWMAPI.DLL. These are the message depends gives me, and DWMAPI.DLL is the only thing that has a yellow question mark next to it:
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Gerald is right. Maya is, in fact, using a different PATH than the Dependency Walker. My plug-in loads another DLL (for image processing) that lives in the Maya plug-ins directory and depends found it with no problem, but Maya didn't. I had to add ";plug-ins" to the PATH in Maya.env.
Seeing as this problem wasn't related to DWMAPI.DLL after all, but DWMAPI is a common problem, I'll post the best link I found about the DWMAPI issue on Novell's website here. Basically, most programs will have this warning in depends.exe, but if there is a delay-load icon next to it, and you are sure that the program won't directly or indirectly call DWMAPI, then it's fine. The problem is elsewhere. If the delay-load icon isn't present, then you have to look at the /DELAY and /DELAYLOAD options in Visual Studio. The fact that depends gave me a "warning" and not an "error" was a clue to the fact that DWMAPI is not being loaded automatically.
Based on your updated problem, DWMAPI.dll is probably not your problem. Dependency walker will always give you that error whenever you are linking to mshtml as it always checks delay loaded DLLs.
At this point my best guess is that you have your project set to dynamically load the runtime libraries and the search path for DLLs is being changed by Maya. So it may be unable to find the MSVC runtime DLL(s). I haven't developed Maya plugins in a long time, but I've had that problem with other apps that have plugin DLLs recently.
Try changing your setting in C/C++->Code Generation->Runtime Library to Multi-Threaded rather than Multi-Threaded DLL.
Aside from that you can try fiddling with Dependency Walker to make it use the same search paths as Maya and see if you can come up with another dependency problem.
As a last resort you can launch Maya in a debugger and set a breakpoint on LoadLibrary and find out which library is not being loaded that way.
This is a tricky one. There's really 2 main ways you will get this error.
1) You have your project set to force delay loaded DLLs to load at application launch. DWMAPI.dll is a delay-loaded DLL and thus normally will not be loaded unless one of it's functions is called. That won't happen on XP unless you're trying to do it in your DLL. But it's possible to set a compiler option to force your app to load the delay loaded DLLs anyway. If you're doing that, don't.
2) It's often a false error that you will get from depends.exe when there is another problem. Run your DLL through dependency walker and see if there are any other dependency problems. If all else fails, try uninstalling IE7 and see if the problem persists. If it is a false error, after you install IE7 you will see the real error. You can install IE7 again afterwards.
I had exactly this problem.
Sneaky problem that took hours to solve.
Anyway. I compiled my managed C++ application on the release machine. Got complaints from customers that could not run it, worked like a charm on all of our machines.
It turned out that the release machine was automatically patched one night a month ago with the ATL vulnerability fix, and so was all other machines also, except one XP machine.
That particulare XP machine could not run the application either. Installed the ATL fix (see link below), and voilá, every thing worked just like before.
http://www.microsoft.com/downloads/details.aspx?familyid=766A6AF7-EC73-40FF-B072-9112BAB119C2&displaylang=en
So lesson learned, always check your intermediate manifests (found the in debug or release directory), that will tell you what version of the DLL that the program have been linked against.
Hope it helps anyone.
Try changing your setting in C/C++->Code Generation->Runtime Library to Multi-Threaded rather than Multi-Threaded DLL.

Compile error in VS.NET 2008 (VB.NET) that I can't get rid of!

I can't shake this error when compiling my Visual Studio.NET 2008 solution. The project that's generating the error is a VB.NET Web Application in a 12 project solution (mixed types and languages).
I've tried all the tricks I can find on google, and the obvious of removing the directoy and folder manually.
I'm running Vista Business 32 with VS.NET 2008 SP1. This just started happening out of the blue today and I've rebooted a bunch and even re-applied SP1 for VS.NET.
Any ideas or has anybody seen this?
vbc : error BC31019: Unable to write to output file 'G:\Projects\TCA.NET\TcaNet\WebUI\obj\Debug\TcaNet.WebUI.pdb': Unspecified error
Update:
After thinking about this and not finding any solutions from answers or via the Internet, I went ahead and moved my entire solution to my C:\ drive vs. my G:\ drive (both are local). Doing this fixed my compile problem for some reason.
I had the same error a few weeks ago when I was compiling on my server from my laptop. Turns out that if G: is a network drive, this could fail. Microsoft have said that fixing this is not a priority, and that there's much better ways of doing things (such as source control). For a one-man project though, it's a pain.
Restart IIS on local.
If that's not the issue then, install Unlocker and try to delete that pdb file when you get the error, Unlocker will tell you which process is holding an open handle to that file.
I have found a list of thing to try to fix your problem :
Zen-turkey Fix list
Hope this help!
maybe it is a dependency problem. check the build order of all the projects..
sysinternals tools should be of help here. using process explorer, are you able to find out if any process is locking this file? another useful tool is process monitor. after applying a filter for the pdb file, capture a trace of all file access activity..
It's probably bug in VB.NET compiler. The error message is incorrect, the real problem is missing file referenced from the project file. For example .vb file.
In my case, I found the missing file and added it, then devenv compiled fine again.
Someone reported that to MS here
Although it is very old thread, but I got this error today and the following link solved it. Hope it help someone reading this.
VB.NET .pdb fix
After thinking about this and not finding any solutions from answers or via the Internet, I went ahead and moved my entire solution to my C:\ drive vs. my G:\ drive (both are local). Doing this fixed my compile problem for some reason.
I had this in Visual Studio 2005 except it was Error 1. I restarted my machine and it fixed the problem.