1 / 1 / 0
Регистрация: 27.01.2010
Сообщений: 21
1

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

07.05.2013, 16:05. Показов 3753. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит событие pinvokestackimbalance
Вызов функции PInvoke "КММ!КММ.DllFunc:: Dynam_Send_Test" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
Гуглил на эту тему, пытался сделать через класс Marshal, но ошибка никуда не уходит. Приведу пример без использования класса Marshal, если кто решал такую проблему подскажите.
C++
1
2
3
4
5
6
7
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;}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Экспорт функций из 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();
При попытке обращения к этим функциям происходит разбалансировка стека описанная выше.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2013, 16:05
Ответы с готовыми решениями:

Передача структуры из C# в DLL на C++
Здравствуйте! Вот такой вопросик, можете подсказать варианты передачи структуры в DLL написанную...

Передача структуры данных в DLL (stdcall)
Хочу передать данные следующей структуры в DLL: Поле1: Символьный тип, длинной 15 букв (Pole_1:...

Передача структуры в dll валит ЕХЕ файл.
Имеется структура в VB Type ST Field1 As String Field2 As Long Field3 As String ...

Структуры в unmanaged dll
Доброго времени суток! В проекте производится много вычислений. Хочу написать unmanaged dll для...

3
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
07.05.2013, 17:27 2
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
[DllImport("../../DLL_Dynam_VS.dll", CallingConvention = CallingConvention.Cdecl)]
4
1 / 1 / 0
Регистрация: 27.01.2010
Сообщений: 21
08.05.2013, 10:12  [ТС] 3
Спасибо огромное, помогло!
З.Ы. Просьба к модераторам раздела поставить "+" Lasur.
0
Дмитрий3241
08.05.2013, 10:38     Передача структуры из программы на c# в dll на c++ и получение структуры из dll
  #4

Не по теме:

Цитата Сообщение от iukash Посмотреть сообщение
З.Ы. Просьба к модераторам раздела поставить "+" Lasur.
Это конечно сильно :D
Я не модератор но раз ты просишь )

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2013, 10:38

Проблемы с импортом структуры из dll
Здравствуйте. Имеется структура, описанная в dll на c++. struct Outstruct { byte* outpointer;...

Вызов структуры из импортированной DLL
Есть DLL: typedef struct tagMData { int errCode; char data; int dataLength; }MData; //.....

Объявление и создание глобальной структуры в dll
объявление я сделал в .h файле но так как структуру нужно создать то вопрос в каком файле это...

DLL для просмотра структуры exe файла
Прошу помощи, в университете задали курсовую работу на тему: DLL для просмотра структуры exe файла....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru