Ich hatte bisher immer folgendes Problem: Wenn ich versucht habe in einer C++ .NET-Klassenbibliothek mittels new eine Instanz einer unmanaged Klasse anzulegen habe ich einen Linker-Error erhalten ("nicht aufgelöstes externes Symbol: new"). In einer .NET WindowsForms-Applikation ist es hingegen gelaufen.
Jetzt habe ich herausgefunden wie ich das Problem lösen kann: ich muss die Datei msvcrt.lib linken (ist irgendwo im Internet gestanden.
Jetzt frage ich mich nur: warum? Was ist denn in dieser Bibliothek msvcrt.lib definiert? Bei normalen Win32-Applikationen oder .NET-WinForms-Programmen ist sie auch nicht gelinkt und der New-Operator funktioniert problemlos. Es ist nur bei Klassenbibliotheken notwendig.
Weiß jemand warum bzw. was die Datei macht?
Wie gesagt: es funktioniert jetzt. Mich interessiert es nur und ich mag es außerdem nicht einfach ein Problem zu lösen, indem ich irgendwas linke, ohne zu wissen was ich da mache.
MSVCRT = MicroSoft Visual C++ RunTime. Darin ist u.a. auch der new-Operator definiert. Für Managed Classes gibt es gemeinerweise einen EIGENEN new-Operator, der über die .NET Library definiert wird. Für Unmanaged Classes muss ein eigenes new her - bingo. Das ist übrigens einer der Gründe, warum mit C++ erstellte .NET-Programme nicht immer plattformunabhängig sind.. -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook.
Achja, in Win32-Programmen wird die Datei automatisch gelinkt, bei Windows Forms auch, weil der WinForms-Teil von .NET auf Win32 basiert ;-) -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook.