То есть в коде c# я хотел бы объявить функцию для c++ dll, чтобы она знала, какую функцию ей вызывать. И потом в процессе работы dll, чтобы сама dll вызывала функцию в c# и передавала ей допустим int.
Пока что получилось только инициализировать функцию и вызвать её прямо из функции инициализации, а как вызвать из другого места dll, грубо говоря для теста из цикла, чтобы она сама вызывалась, не получается.
C++
extern "C"
{
typedef int(__stdcall* Callback)(long lCode, long lParamSize, void* pParam);
__declspec(dllexport) int __stdcall _Initialize(const char* FileName, Callback cbFunction, int Code,
const char* Name, unsigned int Option, unsigned int Option2)
{
cbFunction(0, 0, nullptr);
return 0;
}
}
...
while(true)
{
// cbFunction(1, 2, nullptr); ?????
}
...
C#
public delegate int CallbackDelegate(int lCode, int lParamSize, IntPtr pParam);
[DllImport("Test.dll", CallingConvention = CallingConvention.StdCall)]
public static extern int _Initialize(string FileName, CallbackDelegate cbFunction, int Code, string Name, uint Options, uint Options2);
private int onCallback(int lCode, int lParamSize, IntPtr pParam)
{
Console.WriteLine("Callback Test");
return 0;
}
...
CallbackDelegate del = new CallbackDelegate(onCallback);
_Initialize("SomeFile.dat", del, 1000, "", 0, 4);
...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости