Gå til innhold

Autogenerering av kildekode ved kompillering


Anbefalte innlegg

Hei folkens. Jeg har følgende behov:

Jeg koder en del komponenter i C# som igjen brukes i våre Clarion programmer. For å få dette til så har jeg laget en grunnklasse i Clarion språget og for hver klasse jeg "eksporterer" i C# så må jeg lage en tilsvarende klasse i Clarion og bruke Windows API'et LoadLibrary for å hekte metodene sammen.

 

Jeg ser etter en måte å automatisere denne jobben og jeg tenker at dette enten gjøres i Clarion eller i Visual Studio. Jeg kan veldig fort gjore dette i Clarion, fordi Clarion har et veldig bra Template system som er bygget for nettop dette. Ulempen rundt denne vinkelen er at jeg da må inn i GUI'et til templatet hver gang jeg gjør endringer i .NET klassene og dermed er det fare for feil i prototyper o.l.

 

Hvis jeg hadde greit å få til slik at Visual Studio hadde kunnet generer det jeg trenger under kompillering av prosjektet så hadde det vært gull fordi da kan jeg sikkert bruke noe dekoreringer som hjelper generatoren med kodegenereringen.

 

Her er et eksempel på hva jeg trenger:

 

Klasse i C#:

internal static class CallFromClarion

{

[DllExport("TestAPI", CallingConvention = CallingConvention.StdCall)]

static bool TakeBoolReturnBool(bool pTheValue)

{

Return pTheValue;

}

}

 

Klasse som må genereres til for Clarion legges i to filer.

CallToNetClass.INC: (Samme som header files i C++)

INCLUDE('BaseExternalDLLClass.inc')

CallToNetClass CLASS(BaseExternalDll), MODULE('CallToNetClass.CLW')

TakeBoolReturnBool PROCEDURE(BOOL pTheValue), BOOL

END

 

CallToNetClass.CLW (Selve implementeringen av koden)

MEMBER()

include('CallToNetClass.INC')

MAP('MyDotNetDll.DLL')

API_TakeBoolReturnBool(BOOL pTheValue), BOOL, NAME('TakeBoolReturnBool')

END

 

CallToNetClass.TakeBoolReturnBool PROCEDURE(BOOL pTheValue)

CODE

Return API_TakeBoolReturnBool(pTheValue)

 

 

Såh, hva tror dere? Går det an å få Visual Studio til å opprette/vedlikeholde slike filer?

 

Ser for meg at jeg kansje kan dekorere .NET klassen noe slik:

[GenerateClarion("CallToNet")]

internal static class CallFromClarion

{

[DllExport("TestAPI", CallingConvention = CallingConvention.StdCall)]

[GenerateClarionMethod]

static bool TakeBoolReturnBool(bool pTheValue)

{

Return pTheValue;

}

}

 

Thoughts...?

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

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...