From 6f3ed8db4aae60a2795ccf1badd509ff97eac397 Mon Sep 17 00:00:00 2001 From: triton <ripzonetriton@gmail.com> Date: Thu, 7 Mar 2013 19:53:46 +0000 Subject: [PATCH] Improved marshaling of classes. --- src/Generator/Generators/CLI/CLIMarshal.cs | 28 ++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Generator/Generators/CLI/CLIMarshal.cs b/src/Generator/Generators/CLI/CLIMarshal.cs index 6376e74a..d03b80dc 100644 --- a/src/Generator/Generators/CLI/CLIMarshal.cs +++ b/src/Generator/Generators/CLI/CLIMarshal.cs @@ -171,19 +171,26 @@ namespace Cxxi.Generators.CLI } public bool VisitClassDecl(Class @class) + { + var instance = string.Empty; + + if (!Context.ReturnType.IsPointer()) + instance += "&"; + + instance += Context.ReturnVarName; + + WriteClassInstance(@class, instance); + return true; + } + + public void WriteClassInstance(Class @class, string instance) { if (@class.IsRefType) Return.Write("gcnew "); Return.Write("{0}::{1}(", Library.Name, @class.Name); - Return.Write("(::{0}*)", @class.QualifiedOriginalName); - - if (!Context.ReturnType.IsPointer()) - Return.Write("&"); - - Return.Write("{0})", Context.ReturnVarName); - return true; + Return.Write("{0})", instance); } public bool VisitFieldDecl(Field field) @@ -471,6 +478,13 @@ namespace Cxxi.Generators.CLI private void MarshalRefClass(Class @class) { + TypeMap typeMap = null; + if (TypeMapDatabase.FindTypeMap(@class, out typeMap)) + { + typeMap.CLIMarshalToNative(Context); + return; + } + if (!Context.Parameter.Type.IsPointer()) { Return.Write("*");