Browse Source

Improved marshaling of classes.

pull/1/head
triton 12 years ago
parent
commit
6f3ed8db4a
  1. 28
      src/Generator/Generators/CLI/CLIMarshal.cs

28
src/Generator/Generators/CLI/CLIMarshal.cs

@ -171,19 +171,26 @@ namespace Cxxi.Generators.CLI @@ -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 @@ -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("*");

Loading…
Cancel
Save