@@ -374,27 +374,17 @@ public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
374374 {
375375 var type = Type . Desugar ( resolveTemplateSubstitution : false ) ;
376376 ClassTemplateSpecialization basicString = GetBasicString ( type ) ;
377- var c_str = basicString . Methods . First ( m => m . OriginalName == "c_str " ) ;
377+ var data = basicString . Methods . First ( m => m . OriginalName == "data " ) ;
378378 var typePrinter = new CSharpTypePrinter ( ctx . Context ) ;
379379 string qualifiedBasicString = GetQualifiedBasicString ( basicString ) ;
380380 string varBasicString = $ "__basicStringRet{ ctx . ParameterIndex } ";
381+ bool usePointer = type . IsAddress ( ) || ctx . MarshalKind == MarshalKind . NativeField ;
381382 ctx . Before . WriteLine ( $@ "var { varBasicString } = {
382383 basicString . Visit ( typePrinter ) } .{ Helpers . CreateInstanceIdentifier } ({
383- ctx . ReturnVarName } );" ) ;
384- if ( type . IsAddress ( ) )
385- {
386- ctx . Return . Write ( $@ "{ qualifiedBasicString } Extensions.{ c_str . Name } ({
387- varBasicString } )" ) ;
388- }
389- else
390- {
391- string varString = $ "__stringRet{ ctx . ParameterIndex } ";
392- ctx . Before . WriteLine ( $@ "var { varString } = {
393- qualifiedBasicString } Extensions.{ c_str . Name } ({ varBasicString } );" ) ;
394- ctx . Before . WriteLine ( $@ "{ varBasicString } .Dispose({
395- ( ctx . MarshalKind == MarshalKind . NativeField ? "false" : string . Empty ) } );" ) ;
396- ctx . Return . Write ( varString ) ;
397- }
384+ ( usePointer ? string . Empty : $ "new { typePrinter . IntPtrType } (&") } {
385+ ctx . ReturnVarName } { ( usePointer ? string . Empty : ")" ) } );" ) ;
386+ ctx . Return . Write ( $@ "{ qualifiedBasicString } Extensions.{ data . Name } ({
387+ varBasicString } )" ) ;
398388 }
399389
400390 private static string GetQualifiedBasicString ( ClassTemplateSpecialization basicString )
0 commit comments