Ik was vandaag begonnen met mezelf .NET aan te leren (heb deze korte guide gevolgd: http://www.codeproject.co...T-Forms-in-C-the-Easy-Way ) En dat vlotte aardig. Ik kreeg (tegen mijn verwachtingen in) alles vrij snel werkend in Visual Studio.
Nu, wanneer ik een interface wou bouwen voor een ander project, lukte dit niet. Ik kreeg de error dat <thread> niet gebruikt kan worden met /clr en /clr:pure. Maar ik heb dat wel nodig volgens bovenstaande guide. En zonder die toe te voegen detecteerd hij verschillende namespaces niet.
Ik heb dan wat gegoogled of er workarounds waren. Die bleken er te zijn, maar die waren, voor en noob-programmer als ik, chinees. Ik geraakte er niet echt wijs uit wat ik moest doen. Tot dat ik dit tegenkwam:
Ik maak er uit op dat je in aparte source files clr kan uitzetten in Visual studio. Dit heb ik dan ook geprobeerd: enkel /clr voor de GUI.cpp, maar dit werkte helaas ook niet, want op de GUI.h kon ik die instelling niet aanpassen, en het is daarin dat alle includes staan die /clr nodig hebben (denk ik toch).
Is er iets dat ik fout doe/fout begrijp? Of is er misschien een workaround voor dit probleem?
Nu, wanneer ik een interface wou bouwen voor een ander project, lukte dit niet. Ik kreeg de error dat <thread> niet gebruikt kan worden met /clr en /clr:pure. Maar ik heb dat wel nodig volgens bovenstaande guide. En zonder die toe te voegen detecteerd hij verschillende namespaces niet.
Ik heb dan wat gegoogled of er workarounds waren. Die bleken er te zijn, maar die waren, voor en noob-programmer als ik, chinees. Ik geraakte er niet echt wijs uit wat ik moest doen. Tot dat ik dit tegenkwam:
(gaat wel niet over <thread>, maar over een andere include die blijkbaar ook niet tesamen gebruikt mag worden.)It is not supported because the std::mutex implementation uses GetCurrentThreadId(). That's a winapi function that is not supposed to be use in managed code since it might be running on a custom CLR host that doesn't use threads to implement threading.
This is the good kind of problem to have, it shows that you are building your code wrong. Your native C++ is being compiled with /clr in effect. Which works rather too well, all C++03 compliant code can be compiled to MSIL and get just-in-time compiled at runtime, just like managed code. You don't want this to happen, your native C++ code should be compiled to machine code and get the compile-time code optimizer love.
Turn off the /clr option for this source code file, and possibly others, in your project. Right-click + Properties, General. If the native C++ code is mixed with C++/CLI code in one source file then you can use #pragma managed to switch back-and-forth.
Ik maak er uit op dat je in aparte source files clr kan uitzetten in Visual studio. Dit heb ik dan ook geprobeerd: enkel /clr voor de GUI.cpp, maar dit werkte helaas ook niet, want op de GUI.h kon ik die instelling niet aanpassen, en het is daarin dat alle includes staan die /clr nodig hebben (denk ik toch).
Is er iets dat ik fout doe/fout begrijp? Of is er misschien een workaround voor dit probleem?