HDSoftware Skrevet 21. mai 2014 Del Skrevet 21. mai 2014 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
torbjørn marø Skrevet 21. mai 2014 Del Skrevet 21. mai 2014 (endret) T4 (Text Template Transformation Toolkit) is one way to do this. This is a good resource: http://www.olegsych.com/2007/12/text-template-transformation-toolkit/ Endret 21. mai 2014 av torbjørn marø Lenke til kommentar
HDSoftware Skrevet 3. juni 2014 Forfatter Del Skrevet 3. juni 2014 Veldig bra forslag. T4 er jo helt genialt og gjør akkurat det jeg vil at det skal gjøre.. 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å