Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2013, 16:03   #1
iukash
учу английский...
Форумчанин
 
Аватар для iukash
 
Регистрация: 04.04.2009
Сообщений: 480
По умолчанию Передача структуры из программы на c# в dll на c++ и получение структуры из dll

В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит событие pinvokestackimbalance
Цитата:
Вызов функции PInvoke "КММ!КММ.DllFunc::Dynam_Send_Te st" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
Гуглил на эту тему, пытался сделать через класс Marshal, но ошибка никуда не уходит. Приведу пример без использования класса Marshal, если кто решал такую проблему подскажите.
Код на c++
Код:
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#
Код:
//Экспорт функций из 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();
При попытке обращения к этим функциям происходит разбалансировка стека описанная выше.
"Мы можем что-то изменить и своими силами..."
"Начнешь с себя, примером ближнему поможешь..."
iukash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
DLL и структуры kineziz Общие вопросы C/C++ 9 20.07.2012 09:53
Передача структуры в функцию rus_phantom Общие вопросы C/C++ 7 19.10.2011 20:11
Передача структуры в функцию (Си ) Trackman Помощь студентам 0 26.05.2011 11:23
Передача сообщения из программы в свою Dll SergeySK Общие вопросы Delphi 3 01.11.2007 14:42