Передача структуры из программы на c# в dll на c++ и получение структуры из dll

Узнай цену своей работы

Формулировка задачи:

В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит событие pinvokestackimbalance
Вызов функции PInvoke "КММ!КММ.DllFunc:: Dynam_Send_Test" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
Гуглил на эту тему, пытался сделать через класс Marshal, но ошибка никуда не уходит. Приведу пример без использования класса Marshal, если кто решал такую проблему подскажите.
struct Test {int pInt;}; //объявление структуры
//тестовая функция приема структуры
extern "C" __declspec(dllexport) void Dynam_Send_Test(Test test)
{int i = test.pInt;}
//тестовая функция передачи структуры
extern "C" __declspec(dllexport) Test Dynam_Recv_Test(void)
{test.pInt = 3;}
//Экспорт функций из DLL
    public class DllFunc
    {
        [DllImport("../../DLL_Dynam_VS.dll")]
        public static extern void Dynam_Send_Test(Test test);
        [DllImport("../../DLL_Dynam_VS.dll")]
        public static extern Test Dynam_Recv_Test(void);
    }
//структура
    public struct Test { public Int32 pInt; };
//вызов функций
Test test;
DllFunc.Dynam_Send_Test(test);
test = DllFunc.Dynam_Recv_Test();
При попытке обращения к этим функциям происходит разбалансировка стека описанная выше.

Решение задачи: «Передача структуры из программы на c# в dll на c++ и получение структуры из dll»

textual
Листинг программы
[DllImport("../../DLL_Dynam_VS.dll", CallingConvention = CallingConvention.Cdecl)]

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5