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

Pozivanje managed koda iz native koda

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

[ Pregleda: 2373 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Pozivanje managed koda iz native koda19.12.2004. u 18:06 - pre 186 meseci
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
♪♫♪
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 19:13 - pre 186 meseci
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;

 
Odgovor na temu

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:08 - pre 186 meseci
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
♪♫♪
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:33 - pre 186 meseci
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.
 
Odgovor na temu

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 20:47 - pre 186 meseci
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
♪♫♪
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

icon Re: Pozivanje managed koda iz native koda19.12.2004. u 21:25 - pre 186 meseci
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>
 
Odgovor na temu

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

[ Pregleda: 2373 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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