File tree 1 file changed +14
-3
lines changed
1 file changed +14
-3
lines changed Original file line number Diff line number Diff line change @@ -378,13 +378,24 @@ public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
378
378
var typePrinter = new CSharpTypePrinter ( ctx . Context ) ;
379
379
string qualifiedBasicString = GetQualifiedBasicString ( basicString ) ;
380
380
string varBasicString = $ "__basicStringRet{ ctx . ParameterIndex } ";
381
- bool usePointer = type . IsAddress ( ) || ctx . MarshalKind == MarshalKind . NativeField ;
381
+ bool usePointer = type . IsAddress ( ) || ctx . MarshalKind == MarshalKind . NativeField ||
382
+ ctx . MarshalKind == MarshalKind . ReturnVariableArray ;
382
383
ctx . Before . WriteLine ( $@ "var { varBasicString } = {
383
384
basicString . Visit ( typePrinter ) } .{ Helpers . CreateInstanceIdentifier } ({
384
385
( usePointer ? string . Empty : $ "new { typePrinter . IntPtrType } (&") } {
385
386
ctx . ReturnVarName } { ( usePointer ? string . Empty : ")" ) } );" ) ;
386
- ctx . Return . Write ( $@ "{ qualifiedBasicString } Extensions.{ data . Name } ({
387
- varBasicString } )" ) ;
387
+ string @string = $ "{ qualifiedBasicString } Extensions.{ data . Name } ({ varBasicString } )";
388
+ if ( usePointer )
389
+ {
390
+ ctx . Return . Write ( @string ) ;
391
+ }
392
+ else
393
+ {
394
+ string retString = $ "{ Generator . GeneratedIdentifier ( "retString" ) } { ctx . ParameterIndex } ";
395
+ ctx . Before . WriteLine ( $ "var { retString } = { @string } ;") ;
396
+ ctx . Before . WriteLine ( $ "{ varBasicString } .Dispose();") ;
397
+ ctx . Return . Write ( retString ) ;
398
+ }
388
399
}
389
400
390
401
private static string GetQualifiedBasicString ( ClassTemplateSpecialization basicString )
You can’t perform that action at this time.
0 commit comments