У меня есть интерфейс, 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?
EDIT: код, представленный в качестве примера, кажется, работает.Может ли быть так, что, хотя библиотека C хочет указатель, она никогда не меняет его?Является ли ref обязательным для взаимодействия с функциями, которые принимают указатели?В примере кода C, поставляемого с библиотекой, всегда есть вызывающая сторона, выделяющая память для требуемых структур, если это что-то значит.