Вызов функции С++ из памяти С#

154
09 марта 2018, 12:24

Здравствуйте! Возникла следующая проблема: появилась необходимость вызвать функцию из приложения, написанного на С++, путём вызова ее из памяти (если, конечно, это возможно) на С#. Функция в оригинале выглядит примерно так:

void Send(int Index, int SubIndex, const char* Message)
{
    // Some code
}

Указатель в памяти на эту функцию я могу получить. Достаточно ли этой информации для ее вызова и как это можно сделать?

Answer 1

Если функция загружена в вашем приложении, тогда так:

delegate int SendDelegate(int Index, int SubIndex, IntPtr Message);
int Send(int index, int subIndex, string message)
{
    IntPtr funcPointer = ...; // здесь адрес вашей функции
    var func = Marshal.GetDelegateForFunctionPointer<SendDelegate>(funcPointer);
    IntPtr lpstr = Marshal.StringToHGlobalAnsi(message); // выделяем память под char*
    int result = func(index, subIndex, lpstr);
    Marshal.FreeHGlobal(lpstr); // освобождаем память
    return result;
}
READ ALSO
По поводу загрузки изображения во vue.js

По поводу загрузки изображения во vue.js

Подскажите, как можно загрузить изображение во vuejs без перезагрузки страницы, то есть только добавляю, и отображает на странице мгновенно

268
ios не работает .match

ios не работает .match

В загрузке странички аяксом использую регуляркуВезде работает кроме IOS

315
Как поместить фото на GoogleMap на Node.js?

Как поместить фото на GoogleMap на Node.js?

считывание EXIF данный с помощью пакета exifНеобходимо вытащить оттуда только геоданные и по ним разместить фото на карте

321
Функция load выполняется два раза подряд

Функция load выполняется два раза подряд

У меня есть набор функций, какие должны выполнится после загрузки контента, функцией loadТак вот все что происходит до load вызывается один раз,...

281