Browse Source

Improved marshaling of classes.

pull/1/head
triton 13 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
} }
public bool VisitClassDecl(Class @class) 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) if (@class.IsRefType)
Return.Write("gcnew "); Return.Write("gcnew ");
Return.Write("{0}::{1}(", Library.Name, @class.Name); Return.Write("{0}::{1}(", Library.Name, @class.Name);
Return.Write("(::{0}*)", @class.QualifiedOriginalName); Return.Write("(::{0}*)", @class.QualifiedOriginalName);
Return.Write("{0})", instance);
if (!Context.ReturnType.IsPointer())
Return.Write("&");
Return.Write("{0})", Context.ReturnVarName);
return true;
} }
public bool VisitFieldDecl(Field field) public bool VisitFieldDecl(Field field)
@ -471,6 +478,13 @@ namespace Cxxi.Generators.CLI
private void MarshalRefClass(Class @class) private void MarshalRefClass(Class @class)
{ {
TypeMap typeMap = null;
if (TypeMapDatabase.FindTypeMap(@class, out typeMap))
{
typeMap.CLIMarshalToNative(Context);
return;
}
if (!Context.Parameter.Type.IsPointer()) if (!Context.Parameter.Type.IsPointer())
{ {
Return.Write("*"); Return.Write("*");

Loading…
Cancel
Save