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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2013, 05:47   #1
Geparder
Новичок
Джуниор
 
Регистрация: 26.03.2013
Сообщений: 1
По умолчанию Из С++ в C#

Доброго времени суток)
Встала задачка, прочитать Dll, написанную на с++.
В ней делегат описан следующим образом:
Код:
typedef bool (*t_DeCodeDataTimeLicence) (const char * a_EnCodeValue, int & a_DateTime, const int a_Id_User);
Перевожу на C#
Код:
internal delegate bool t_DeCodeDataTimeLicence(char[] a_EnCodeValue, ref int a_DateTime, int a_Id_User);
Пишет ошибку:
Код:
Вызов функции PInvoke "WPF_CRYPT!WpfApplication1.MainWindow+t_DeCodeDataTimeLicence::Invoke" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой.
Подскажите, плз, где ошибка? Заранее, большое спасибо)
Geparder вне форума Ответить с цитированием
Старый 26.03.2013, 11:50   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В C++ нет делегатов. Это раз.
char* обычно подразумевает строку, завершаемую нулевым символом - и, в любом случае, типу C++ char соответствует тип C# byte.
Тип const int в качестве аргумента функции - бессмыслица.

Но скорее всего, Ваша проблема вызвана тем, что вызвавшая и вызывающая стороны "не договорились" в смысле соглашений о вызове - PInvoke, насколько помню, "по умолчанию" считает все функции stdcall, а C++ - cdecl. Вообще, есть у меня немалые сомнения по поводу работоспособности схемы, в которой в неуправляемый код передаётся указатель на функцию управляемого кода. В частности, если в функции создаются новые объекты, сборщик мусора может не разобраться в ситуации (ведь из корневого множества до них будет не дотянуться).
Abstraction вне форума Ответить с цитированием
Ответ


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