Реализуйте делегат C # с двумя параметрами типа long в классе-оболочке CRL - PullRequest
0 голосов
/ 31 мая 2019

Для вызова C # dll внутри C ++ мы используем класс-оболочку CLR. Я хочу реализовать логику для реализации делегата C # внутри C ++. но делегат имеет 2 параметра типа long. с нескольких сайтов я могу реализовать делегат со строковым параметром.

Некоторый код был написан здесь как часть комментария

ref class CSharpClassEventsHandler { private: List ^ onMessageCallbacks;

public: CSharpClassEventsHandler(CSharpClass^ cSharpClass)
{
            onMessageCallbacks = gcnew List<IntPtr>();
            CSharpClass->OnRequest += gcnew OnRangerRequestDelegate(this, &CSharpClassEventsHandler::OnStartUp);
            CSharpClass->OnNewStateReq += gcnew OnRangerRequestDelegate(this, &CSharpClassEventsHandler::OnNewState);
}

private: void OnStartUp(System::String^ message)
{
             IntPtr ptr = Marshal::StringToHGlobalAnsi(message);

             const char* msg = (const char*)ptr.ToPointer();

             for (int i = 0; i < onMessageCallbacks->Count; i++)
             {
                 void(*ptr)(const char*) = (void(*)(const char*))onMessageCallbacks[i].ToPointer();

                 ptr(msg);
             }

             // Avoid memory leak.
             Marshal::FreeHGlobal(ptr);
}

private: void OnNewState(Int64 State1, Int64 State2)
{
             //required logic to implement here.
             // could you please help me write logic here
}

public: void RegisterOnNewState(void(*callback)(const long, const long))
{
            IntPtr ptr(callback);

            onMessageCallbacks->Add(ptr);
}

public: void RegisterOnStartUp(void(*callback)(const char*))
{
            IntPtr ptr(callback);

            onMessageCallbacks->Add(ptr);
}

};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...