Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pozivanje managed koda iz native koda

[es] :: .NET :: Pozivanje managed koda iz native koda

[ Pregleda: 1029 | Odgovora: 6 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1858
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Pozivanje managed koda iz native koda19.12.2004. u 18:06

Može li neko da me uputi na dobar članak o ovome? Dakle potrebno je da funkcije managed objekta pozivam iz unmanaged koda. Našao sam nešto ovde, ali bi bilo lepo kada bi neko priložio još neki link.
Hvala.
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
19.12.2004. u 18:06 

Dragi Tata

Član broj: 1958
Poruke: 3899
*.bos.east.verizon.net.

Sajt: www.novetehnologije.com


Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 19:13
Nažalost ne znam ni jedan link (odavno se nakanjujem da napišem članak na tu temu za Code Project), ali evo kako bi u principu to išlo:

1. U unmanaged projekat dodaš novu klasu (može i preko wizarda - generic C++ class) i kreiraš nov cpp i h fajl za nju - nazovimo je Wrapper
2. U Solution Explorer-u desnim dugmetom klikneš na fajl Wrapper.cpp i startuješ "Properties"
3. Pod "General", nađi opciju "Compile as Managed" i promeni u "Assembly Support(/clr)"
4. Kad probaš da kompajliraš, kompajler će prijaviti neke nekompatibilne opcije, među njima precompiled headers i run-time checks. Isključi ih.
5. U Wrapper.h dodaj #include <vcclr.h>
6. Za svaku managed klasu koju želiš da pozivaš, koristi šablon gcroot, npr:
Code:
gcroot<System::String*> str;

19.12.2004. u 19:13 

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1858
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:08
Evo par ispravki koje sma morao da odradim kada sam uključio "/CLR". Možda nekom zatreba:

1° Mora da se isključi "/Gm" (Enable Minimal Rebuild)
2° Umesto Single-Threaded runtime library ("/ML" | "/MLd"), mora da ide multithreaded ("/MT" | "/MTd").
3° Umesto Program Database for Edit & Continue ("/ZI") ide samo Program Database ("/Zi") debugging.

tako da ovakav program radi
Code:
#using <mscorlib.dll>
#include <vcclr.h>
using namespace System;

class CUnManaged
{
public:
    CUnManaged() {};
    gcroot<String*> str;
};

int main() 
{
   CUnManaged *c = new CUnManaged();
   c->str = new String("Hello managed world!");
   Console::WriteLine(c->str);
   return 0;
}


E sad, interesuje me nešto oko /Zi switcha. Dokumentacija govori o "performance implications" kada se koristi zajedno sa "/CLR". Jel to važi samo pri debugovanju, tj. da li kod release verzije treba da isključim /Z* parametar?
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
19.12.2004. u 20:08 

Dragi Tata

Član broj: 1958
Poruke: 3899
*.bos.east.verizon.net.

Sajt: www.novetehnologije.com


Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:33
Eh, pa tako ti je sav kod managed. To si mogao da dobiješ mnogo lakše ako u Wizard-u izabereš Console Application (.NET) za tip projekta. Ja sam mislio da već imaš postojeći native projekat pa treba da mu dodaš neku funkcionalnost koja zavisi od .NET-a.
19.12.2004. u 20:33 

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1858
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:47
Pa dobro, ovo je samo primer. Razumeo sam ja (valjda). Treba da uključim /CLR (i "#using <mscorlib.dll>") u onim delovima koda gde imam pozive managed objekata. Zar ne? Kako drugačije?
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
19.12.2004. u 20:47 

Dragi Tata

Član broj: 1958
Poruke: 3899
*.bos.east.verizon.net.

Sajt: www.novetehnologije.com


Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 21:25
Da. Poenta je da možeš samo pojedine cpp fajlove u inače native projektu da kompajliraš sa /clr. Znači, ako imaš neku native aplikaciju koju ne želiš da prekompajliraš u IL, a želiš da iz nje pozivaš neke .NET komponente, onda je ovo dobar način. Mada, možeš i preko COM-a, ali lično nisam ljubitelj te tehnologije.

Inače, nema potrebe da pišeš #using <mscorlib.dll> ako već imaš #include <vcclr.h>
19.12.2004. u 21:25 

[es] :: .NET :: Pozivanje managed koda iz native koda

[ Pregleda: 1029 | Odgovora: 6 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.