簡體   English   中英

ref關鍵字和包裝器方法

[英]ref keyword and wrapper methods

我有一個接口,IProxy和一個實現代理。 代理的目的是包裝一些調用C庫的外部函數。 對於外部聲明,這要求使用ref關鍵字傳遞結構。 這是一個示例:

namespace CFuncs {
  [DllImport("cLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
  public static extern int MyCFunc(ref MyStruct result);
}

public interface IProxy { public int MyFunc(MyStruct result); }

public class Proxy : IProxy { 
  public int MyFunc(MyStruct result) { 
    return CFuncs.MyCFunc(ref result);
  }
}

C頭文件中的函數聲明:

int MyCFunc (MY_STRUCT* result);

typedef struct  { 
  // some fields
} MY_STRUCT;

和調用代碼:

var proxy = new Proxy();
var result = new MyStruct();
proxy.MyFunc(result);

我的問題是我應該在包裝器接口和實現中使用ref還是使用C函數將結構正確填充數據?

編輯:作為示例呈現的代碼確實起作用。 難道就是即使C庫想要一個指針,它也從未真正改變它? ref是否需要與帶有指針的函數互操作? 庫附帶的示例C代碼始終讓調用方為其采用的結構分配內存,如果這意味着任何意義的話。

.NET使用按值調用,而且struct是一種值類型-因此,如果要由外部函數更改它,則應將其作為ref參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM