Передача структуры из программы на c# в dll на c++ и получение структуры из dll
Формулировка задачи:
В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит событие pinvokestackimbalance
Гуглил на эту тему, пытался сделать через класс Marshal, но ошибка никуда не уходит. Приведу пример без использования класса Marshal, если кто решал такую проблему подскажите.
При попытке обращения к этим функциям происходит разбалансировка стека описанная выше.
Вызов функции PInvoke "КММ!КММ.DllFunc:: Dynam_Send_Test" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
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)]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д