Re[7]: Какие методы логирования из С либы знаете?
От: kov_serg Россия  
Дата: 10.01.26 11:28
Оценка:
Здравствуйте, tapatoon, Вы писали:

T>
T>[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
T>public delegate void Callback([MarshalAs(UnmanagedType.LPUTF8Str)] string str);

T>[DllImport("lib", CallingConvention = CallingConvention.Cdecl)]
T>public static extern void Func(Callback dataReceiver);
T>


T>
T>using Callback = void (*)(const char* str);
T>void Func(Callback dataReceiver)
T>{
T>   dataReceiver(toUtf8(...));
T>}
T>


T>Тут главное сделать удобные врапперы над всем этим, дабы каждый вызов функции не превращался в писанину на несколько строк

Если c# может jit-тить callback-и то остальным нужен указатель на контеркст. Или придётся велосипедить переходники на другой стороне.
Удобство можно добиться обычным врапером. И будет вообще не видно что под капотом. Короче компромис есть всегда. И конкретная реализация зависит от требований к задаче.
Но вызов с void fn(void* ctx,const char* data,int size); и меет более общий характер нежели void fn(const char* cstr_utf8); хотя одно всегда можно привести к другому, но это требует дополнительных усилий
по описанию/документированию происходящего и дополнительным накладным расходам для всех сторон.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.