Maciej Czerwiakowski

Maciej Czerwiakowski Change Manager @ HP
/ MCPD : Enterprise
Application Devel...

Temat: Mieszanie kodu zarządzanego i niezarządzanego w C++

Tak jak w temacie, a dokładniej muszę napisać renderer pod DirectX w niezarządzanym C++ i udostępnić go dla logiki i UI napisanych w C#. Niestety nie mogę przebrnąć przez zrobienie wrappera i konwersję między std::map<> i cliext::map<>. Googlowanie przeraziło mnie tylko, bo punkty wejścia do biblioteki, inicjalizowanie, konstruktory statyczne i cała masa rzeczy związana z C++ uległa zapomnieniu (od paru lat robię tylko w C#) i byłbym zobowiązany z jakąś podpowiedź, względnie łopatologicznego linka.

//EDIT
Pisząc o konwersji std::map<> na cliext::map<>, generalnie mam na myśli przejście z niezarządzanej std na jej zarządzany odpowiednik

//EDIT2
W VS2008Maciej Czerwiakowski edytował(a) ten post dnia 21.02.08 o godzinie 22:58
Maciej Czerwiakowski

Maciej Czerwiakowski Change Manager @ HP
/ MCPD : Enterprise
Application Devel...

Temat: Mieszanie kodu zarządzanego i niezarządzanego w C++

Temat nieaktualny. Strata prędkości przy kodzie zarządzanym jest na tyle nieduża, że można sobie darować walkę z mixed mode.

Tak przyszłościowo (może komuś się przyda):

Jeżeli musicie mieszać w ramach jednej biblioteki w C++ klasy zarządzane z niezarządzanymi i nie daj boże w tych ostatnich używacie czegokolwiek z namespace std lub polami statycznymi od razu googlajcie "Mixed mode initialization bug". Wszystko rozbija się o to, że taka zarządzana biblioteka nie ma punktu wejścia który w którym inicjalizowane są pola statyczne w związku z czym cała std się wykłada i na pierwszy rzut oka nawet tego nie widać :( Dopiero w trakcie pracy rzuca od czasu do czasu wyjątkami (gubią sie wskaźniki, niepoprawna inicalizacja klas, etc.). U mnie na przykład wykładało się renderowanie sceny, bo próba wywołania funkcji z obiektu COM reprezentującego urządzenie wyrzucała SEHException, a to tylko dlatego, że trzymałem listę obiektów w (źle zainicjalizowanym) std::map, jak wpisałem na sztywno jedną zmienną od razu działało.

I to tyle z wynurzeń porannych :P

Następna dyskusja:

Dekompilacja kodu




Wyślij zaproszenie do