Windows Forms, Threads
-
Hallo,
ich arbeite in einer Gruppe an einem Conways Game of Live Projekt, als Übung.
Nun stehen wir vor dem Problem, das wir zum Windows Forms Projekt unabhängig Entwickelte Header und Source Dateien einbinden müssen.
Diese enthält eine Threadaufruf, um mehrere Conways Welten unabhängig und ohne "Wartezeit" berechnen zu lassen.Header:
class Simulation { public: ... int start(); private: static DWORD __stdcall threadsimulate (void *self); HANDLE handle; DWORD threadID; }
Source:
int Simulation::start() { // Thread erstellen threadID = id; handle = CreateThread(0,0,threadsimulate,this,0,&threadID); return 0; } DWORD __stdcall Simulation::threadsimulate (void *self) { Simulation *s = (Simulation *)self; // Code und Zugriff auf Membervariablen über s return 0; }
in Visual Studio 2010 bekomm ich nun den Fehler:
1>Simulation.cpp(98): error C2664: 'CreateThread': Konvertierung des Parameters 3 von 'DWORD (__stdcall *)(void *)' in 'LPTHREAD_START_ROUTINE' nicht möglich 1> Die Adresse einer Funktion liefert die __clrcall-Aufrufkonvention in /clr:pure und /clr:safe. Verwenden Sie evtl. __clrcall im Zieltyp. 1>c:\users\...\01_createthread\framework\framework\Simulation.h(69): error C3641: "Simulation::threadsimulate": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
Als normale C++ Konsolenanwendung funktioniert alles wie beabsichtigt, nur kann ich mit diesem Fehler absolut nichts anfangen.
Vielleicht könnt Ihr mir weiterhelfen!?
-
Du kanns keinen native Code in "pure" oder "safe" .NET Anwendungen verwenden (steht doch da, oder?)!
Also: Stelle Dein Projekt um nach "/clr" anstelle von "/clr:pure/safe" oder schmeiss den native Code raus (wobei sich ja dann die Frage stellt, warum mach C++/CLI macht und nicht C#).
-
Hat funktioniert, Danke!