Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 av GeirGrusom
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...