Gå til innhold

C++ wrapper for .NET og Win32


Anbefalte innlegg

Folkens.

Jeg sliter litt med å få til følgende. La meg først informere om hav jeg har som virker just fine...

 

Mitt Win32 program er skrevet i Clarion. Dette er altså ren Win32 kompillert binary som har full støtte for Win API

 

Så har jeg et .NET program skrevet i C#. Det jeg er ute etter er å kalle begge veier. Altså vil jeg kalle .NET metoder fra mitt WIn32 program og jeg vil kalle prosedyrer i mitt Win32 program fra .NET

 

Jeg har laget en C++ wrapper som eksporterer en statisk prosedyre. Denne prosedyren kaller jeg fra Win32 programmet der jeg sender over et Interface. Dette interfacet sendes inn i en klasse i C++ programmet. Denne klassen instanserer et .NET objekt og dermed har jeg alt jeg trenger for å kalle .NET metoder fra mitt Win32 program. Mitt problem er andre veien.

 

Min statiske prosedyre ser slik ut:

extern "C" __declsped(dllexport) iCommunisafe * __stdcall SetCommunisafeInterOP(iClarion * pClarionCallback)
{
   CommunisafeClass *ThisInterOP = new CommunisafeClass(pClarionCallback);
   return ThisInterOP;
}

 

Så i konstruktøren har jeg følgende:


CommunisafeClass : public iCommunisafe
{
public:
   CommunisafeClass(iClarion * pClarionCallback)
   {
       ThisClarionCallback = pClarionCallback;
       CommunisafeManager::Login(ThisClarionCallback->GetUserID);
   }
}

Som dere ser så kaller jeg et .NET statisk objekt med navn CommunisafeManager sin metode Login og parameteret hentes med interface metoden GetUserID.

Dette fungerer helt perfekt.

 

Jeg ønsker i linjen før Login å sende inn et Interface for å få en Callback til C++, altså noe slik:

 

Communisafe::SetCppIF(iCommunisafe)

 

Er dette mulig å få til? I så fall - hvordan?

 

Hensikten er jo selvfølgelig at .NET programmet skal kunne kalle dette interfacet direkte og at C++ koden bak interface metodene skal kalle Win32 programmet, slik jeg jo gjør det ellers i programmet.

Endret av HDSoftware
Lenke til kommentar
Videoannonse
Annonse

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å
×
×
  • Opprett ny...