У меня сложности в понимании коннектора возникли по сути не по самому коннектору, а его реализации на C#.
Эти сложности связаны с тем что библиотека txmlconnector написана на C++, у нее плюсовый интерфейсы и типы, которые при использовании в C# необходимо мэтчить ("маршаллить") с шарповыми.
[DllImport("txmlconnector.dll", CallingConvention = CallingConvention.StdCall)]
private static extern bool SetCallback(CallBackDelegate pCallback);
Это всего лишь декларация (описание) функции в языке C#, которая экспортируется из библиотеки txmlconnector. Вам ее особо понимать не надо, надо использовать саму функцию с указанным набором аргументов.
// тут понятно, делегируем функцию Колбек из библиотеки в свою функцию
Callback-функция - как можно догадаться, есть функция обратного вызова. То есть мы указываем библиотеке txmlconnector (см функцию SetCallback) что хотим получать данные от нее в нашу функцию, которую пишем в своем приложении. Данные, приходящие в колбек - это результаты выполнения запросов, которые пораждаются функцией SendCommand. Как callback-функция будет вызываться и откуда в ней берутся данные вас волновать не должно. Будем считать библиотеку черным ящиком, который что-то генерирует и оповещает нас об этом. Главное что нужно знать и это указано в документации - callback функцию нельзя блокировать на длительное время и делать в ней сложную обработку данных. То есть ее назначение принять данные и положить, например, в очередь для дальнейшей обработки.
Из документации:
"В callback функции не должны выполняться операции, которые могут заблокировать поток на длительное время. Также из callback функции не следует вызывать управляющие функции библиотеки: Initialize, UnInitialize, SetCallback, SetCallbackEx, SendCommand, так как это может привести к взаимной блокировке потоков библиотеки."
// тут не понятно что же такое IntPtr, поискал почитал понятнее не стало использую как есть без понимания
Это шарповый тип, который представляет из себя указатель. Так как в C# нет указателей, как в C++, их надо мэппить на шарповые типы.
Их MSDN: "Тип IntPtr может использоваться языками, поддерживающими указатели, и как распространенный способ обращения к данным между языками, которые не поддерживают указатели."
Пример маршаллинга класса:
https://www.codeproject.com/Articles/18032/How-to-Marshal-a-C-ClassВозможно есть какой-то другой более простой способ
Пишите на C++. Как минимум потребность в маршаллинге исчезнет.
Вопрос к разработчикам.
Такой возможности нет. Есть возможность (см. функцию SetCallback) задать глобальный идентификатор на каждый callback (это сделано для проектов, в которых несколько библиотек пишут в одну callback-функцию).