[英]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.