@@ -374,27 +374,17 @@ public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
374
374
{
375
375
var type = Type . Desugar ( resolveTemplateSubstitution : false ) ;
376
376
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 " ) ;
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
382
ctx . Before . WriteLine ( $@ "var { varBasicString } = {
382
383
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 } )" ) ;
398
388
}
399
389
400
390
private static string GetQualifiedBasicString ( ClassTemplateSpecialization basicString )
0 commit comments