HDSoftware Skrevet 7. oktober 2009 Del Skrevet 7. oktober 2009 Folkens.... Jeg er nå i en situasjon der jeg ønsker å kalle en .NET metode ifra mitt Clarion program. Derfor har jeg etter en del søk frem og tilbake og rundt om kring funnet ut at det er noe som heter "It Just Works" som er en slags wrapper man må lage i C++. Dette fordi C#, eller rettere sagt, .NET er Managed Code mens C++ og Clarion ikke er det. Jeg har funnet en del artikkler som forteller meg hvordan jeg lager en slik DLL og at /CLR må være med, noe VS2010 gjør for meg i prosjektet. Vel og bra - det som jeg nå lurer på er hvordan jeg kan, fra min c++ wrapper, kalle opp .NET metoder. Er det noen som har noen erfaringer rundt dette.... Takker for alle innspill... Lenke til kommentar
GeirGrusom Skrevet 7. oktober 2009 Del Skrevet 7. oktober 2009 Du må bruke et språk som kalles C++/CLI (som er en utvidning av vanlig C++ med en del managed funksjoner) Dette følger med Visual Studio. C++/CLI er en managed/unmanaged blanding av C++. Managed klaser deklareres med ^ For eksempel System::String^ my_string = gcnew System::String(); Det er en del ting en må vite, og det finnes mange artikler rundt C++/CLI. Lenke til kommentar
HDSoftware Skrevet 7. oktober 2009 Forfatter Del Skrevet 7. oktober 2009 Hallåysen Du, jeg har søkt i hytt og pine og funnet masse artikler om dette, men ingen av dem er såpass "forenklet" at jeg fikk noe ut av det. Se for deg følgende scenario: ClarionDLL: Eksporterer en prosedyre: void Hello(String pName) C# DLL: Bruker DllImport for å hente den funksjonen som er definert over og dette fungerer perfekt. Det neste jeg trenger er å kunne kalle fra Clarion DLL'en i C# programmet. Det er i denne forbindelsen at jeg tenker IJW. Jeg prøvde å opprette en LibraryDLL i C++, men som du sikkert skjønner så er mine kunnskaper i c++ relativt intetsigende så det blir liksom bare gjettninger her. Kunne du lagd et lite eksempel i VS tror du? Som demonstrerer hvordan jeg kan lage en wrapper som kaller inn i C#, som videre eksporteres slik at jeg kan kalle "wrapperen" fra Clarion. Det er viktig at den kompillerte DLL'en eksporterer en standard Windows DLL da Clarion ikke uten videre kan plukke opp klasser og slikt. Prosjektet trenger ikke kompilere, bare demonstrere prototypinge og plassering av kode etc. på forhånd takk Lenke til kommentar
GeirGrusom Skrevet 8. oktober 2009 Del Skrevet 8. oktober 2009 (endret) Akai Kort eksempel extern "C" { // For å slippe en .exp fil bruker man dllexport __declspec(dllexport) // Tving frem bruk av C sin cdecl som argumentpassingstype void __cdecl ClarionFunction(void) { System::Windows::Forms::Form^ new_form; new_form = gcnew System::Windows::Forms::Form(); new_form->ShowDialog(); new_form->Dispose(); } } Denne funksjonen eksporteres fra C++ som en vanlig C funksjon. Den oppretter en form(tom) og viser den modalt. Du må også kikke på #import og #using direktivene for jeg er litt usikker på hvordan det fungerer siden det er en stund siden jeg brukte C++/CLI. edit: Jeg skal skrive et litt mer komplett eksempel når jeg kommer hjem edit2: og her er det: http://cid-d71a02d533ba39e0.skydrive.live....rionInterop.zip Jeg har store problemer med nettet her, så jeg fikk ikke lastet det opp hit :S Endret 8. oktober 2009 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå