0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
||||||||||||||||
Подключение неуправляемого кода15.10.2018, 19:56. Показов 5259. Ответов 25
Метки нет Все метки)
(
Есть код на С++
0
|
15.10.2018, 19:56 | |
Ответы с готовыми решениями:
25
Вызов неуправляемого кода из длл |
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
|
16.10.2018, 09:48 | |
char* в C# как string должен быть, а не IntPtr как я помню, попробуйте в такой вариации, может потому и нету данных. Да и это единственное чего нету? остальные данные приходят?
Добавлено через 3 минуты Есть вот такая статья у майков: https://docs.microsoft.com/en-... orm-invoke описывает какой тип какому соответствует, думаю будет полезна.
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
||||
16.10.2018, 10:42 [ТС] | ||||
Сейчас проверю. Добавлено через 3 минуты Добавлено через 17 секунд
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
|||||||||||||||||
16.10.2018, 12:10 [ТС] | |||||||||||||||||
Проблема в общем следующая: Есть рабочая программа. К ней нужно было подцепить Сберовские терминалы. Была библиотека, в которой уже была реализована работа с аналогичными терминалами от других поставщиков. Подцепил все быстро под COM. Но после первой успешной транзакции в программе, программа вылетала System.ArithmeticException при клике на любом контроле. Попробовал без COM напрямую через pilot_nt.dll. (пока только чек не удалось получить) ТО же самое. После первой успешной, любой клик на контроле и программа вылетает. Печаль в том, что тестовое приложение с этой же библиотекой работает без вылетов в обоих реализациях. Куда смотреть? МОЗГ взрывается. неделя бессоных ночей!
0
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
||||||
16.10.2018, 12:16 | ||||||
VicNic, у Вас обычный char в C# он такой же char, только массив иначе объявляется:
p.s. я же дал Вам ссылку по мапингу типов, там можно это всё легко глянуть было Добавлено через 1 минуту по поводу Вашей проблемы тут уже надо смотреть целиком Ваш код, и код "любого контрола" что они делают, и смотреть что именно вызывает такую ошибку.
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
||
16.10.2018, 12:33 [ТС] | ||
0
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
||
16.10.2018, 12:41 | ||
0
|
![]() 6525 / 4101 / 1606
Регистрация: 09.05.2015
Сообщений: 9,564
|
||||||||||||
16.10.2018, 12:47 | ||||||||||||
А почему у вас
0
|
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
|
|
17.10.2018, 11:29 | |
Зачем вообще переводить C++ на C# ? Существует канал доступа к программе на C++ в неуправляемой среде из программы на C#. Пишите основу программы на C# для управляемой среды и выполняйте код на C++ в неуправляемой среде. Все делается через этот канал доступа. Также приведен пример как все это делать, конкретно для подсчета суммы элементов матрицы.
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
||||||||||||
17.10.2018, 12:31 [ТС] | ||||||||||||
Кинули на эту задачу. Приходится "на лету" язык изучать. Поэтому прошу помощи чуть более поконкретнее. На С++ это пример из документации для интеграторов. Добавлено через 34 минуты Сейчас все откатил на работу с COM. Все чеки получаю. Тестовая форма работает идеально. После вызова из основного приложения, первая транзакция проходит успешно. Программа не вылетает. Но стоит на этой форме кликнуть на любой control - вылетает с System.ArithmeticException Так как переключение на работу с другим терминалом не вызвает подобных вылетов, подозреваю что проблема в самом подключении и вызове через COM. Подключал просто через добавление Ссылки. Это подключение
0
|
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
|
|
17.10.2018, 12:37 | |
Это здесь
https://sites.google.com/site/... home/files Скачайте Instruction.docs, далее - Глава 4. Методы взаимодействия с программными средствами на основе языка С. На стр. 113 тот же пример для языка BVM. Добавлено через 6 минут Посмотрите пример, может, подойдет. Не уверен, что ваш случай, и тем не менее.
0
|
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
|
|
17.10.2018, 13:20 | |
Интересная задачка. Я бы с чего начал: уж если достучался указателем до массива char в неуправляемой среде, попробовал бы поэлементно вытаскивать отдельные символы, пока не наткнусь на нулевой. А уж из массива символов собрать строку не проблема.
0
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
|
17.10.2018, 13:30 | |
VicNic, видно конечно не очень, но по стеку виднеется вызов метода если не путаю Execute (плохо видно на таких скринах), судя по тому откуда начинается стэк у Вас WPF приложение, значит скорей всего этот метод стоит на биндинге, нужно смотреть что в них происходит, возможно передаются данные или идёт обращение к несуществующим параметрам у терминала. На текущий момент Вам нужно отлаживать Ваше ПО начиная с метода описанного выше, я не имея понятия что там и как вообще всё устроено могу только советовать. Вам нужно найти точку "входа" для этой функции, ставить точку остановки и поэтапно смотреть какие параметры и куда уходят.
Добавлено через 52 секунды B_S_V, у меня такое чувство что вы робот и пишите просто набор слов чуть чуть подходящие под тему...
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
|
17.10.2018, 13:42 [ТС] | |
Не робооооооообот я.
![]() Просто не знаю как к этому подступиться. Не хватает знаний и опыта. Добавлено через 1 минуту И так как, ответы приходят с опозданием, уже кучу вещей сам пробую. Поэтому такие "скачки" в потоке мысли. Добавлено через 6 минут Это код уже после вызова терминала СБера. Работа с терминалом закончилась. То есть остается окно с выбором мест. Отмечаю новые места (можно не отмечать), нажатие на любую кнопку, приводит к этому событию. Добавлено через 52 секунды ЕСли терминал СБер не вызывать, то все работает как часы. Так же все раюотает, еслы переключить вызов вместо терминала СБер на любой другой из поддерживаемых.
0
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
|
17.10.2018, 13:57 | |
VicNic, про робота было не Вам
я понимаю что это уже после вызова, я и говорю Вам ставьте точку остановки на этом методе и смотрите что там вызывается, у меня нету Вашего проекта и нет возможности воспроизвести ошибку, чтобы в точности сказать что и как Добавлено через 1 минуту метод GO во ViewModel строка 798. Ставьте точку остановки и смотрите что именно вызывает там у Вас такой эксепшенДобавлено через 5 минут VicNic, идея конечно так себе но попробуйте работу с терминалом сделать отдельным потоком (для тестов). Есть вероятность что текущая работа просто нарушает целостность и ошибка уже как следствие идёт Добавлено через 6 минут P.S. а нет ли в той строке с ошибкой использования double.NaN ?
0
|
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
|
|
17.10.2018, 14:32 [ТС] | |
2018-10-17 14:26:27,479 [9] ERROR TT.TicketKassa.App [(null)] - System.Windows.Markup.XamlParseException : "Задание свойства "System.Windows.FrameworkElement.Hei ght" вызвало исключение.": номер строки "13" и позиция в строке "9". ---> System.ArithmeticException: Переполнение или потеря точности в арифметической операции.
в System.Double.Equals(Object obj) в System.Object.Equals(Object objA, Object objB) в System.Windows.DependencyObject.UpdateEf fectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) в System.Windows.DependencyObject.SetValue Common(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) в System.Windows.Baml2006.WpfKnownMemberIn voker.SetValue(Object instance, Object value) в MS.Internal.Xaml.Runtime.ClrObjectRuntim e.SetValue(XamlMember member, Object obj, Object value) в MS.Internal.Xaml.Runtime.ClrObjectRuntim e.SetValue(Object inst, XamlMember property, Object value) --- Конец трассировки внутреннего стека исключений --- в System.Windows.Markup.WpfXamlLoader.Load (XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) в System.Windows.Markup.WpfXamlLoader.Load Baml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) в System.Windows.Markup.XamlReader.LoadBam l(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) в System.Windows.Application.LoadComponent (Object component, Uri resourceLocator) в TT.TicketKassa.Controls.InputNumber.Init ializeComponent() в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Con trols\InputNumber.xaml:строка 1 в TT.TicketKassa.Controls.InputNumber.Show PayWindow(String message, OrderSaleType& orderSaleType) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Con trols\InputNumber.xaml.cs:строка 25 в TT.TicketKassa.Services.ProcessOrder.Pro cessOrderService(Boolean fast, Int32 showId, Int32 clientID, OrderData orderData, String seatsString, Int32 Count, Byte typeseatForUpdate) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Ser vices\ProcessOrder.cs:строка 46 в TT.TicketKassa.ViewModels.RepertoryViewM odel.Sale0(Boolean fast) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Vie wModels\RepertoryViewModel.cs:строка 887 в TT.TicketKassa.ViewModels.RepertoryViewM odel.Go(Boolean fast) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Vie wModels\RepertoryViewModel.cs:строка 797 в TT.TicketKassa.ViewModels.RepertoryViewM odel.Sale(Object obj) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Vie wModels\RepertoryViewModel.cs:строка 787 в AttachedCommandBehavior.ActionExecutionS trategy.Execute(Object parameter) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Vie ws\Commands\ExecutionStrategy.cs:строка 71 в (CommandBehaviorBinding , Object , RoutedEventArgs ) в System.Windows.RoutedEventHandlerInfo.In vokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlers Impl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl( DependencyObject sender, RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent(Rout edEventArgs e) в System.Windows.Controls.Primitives.Butto nBase.OnClick() в System.Windows.Controls.Button.OnClick() в System.Windows.Controls.Primitives.Butto nBase.OnMouseLeftButtonUp(MouseButtonEve ntArgs e) в System.Windows.UIElement.OnMouseLeftButt onUpThunk(Object sender, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArg s.InvokeEventHandler(Delegate genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHan dler(Delegate handler, Object target) в System.Windows.RoutedEventHandlerInfo.In vokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlers Impl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.ReRaiseEventAs( DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) в System.Windows.UIElement.OnMouseUpThunk( Object sender, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArg s.InvokeEventHandler(Delegate genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHan dler(Delegate handler, Object target) в System.Windows.RoutedEventHandlerInfo.In vokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlers Impl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl( DependencyObject sender, RoutedEventArgs args) в System.Windows.UIElement.RaiseTrustedEve nt(RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent(Rout edEventArgs args, Boolean trusted) в System.Windows.Input.InputManager.Proces sStagingArea() в System.Windows.Input.InputManager.Proces sInput(InputEventArgs input) в System.Windows.Input.InputProviderSite.R eportInput(InputReport inputReport) в System.Windows.Interop.HwndMouseInputPro vider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) в System.Windows.Interop.HwndMouseInputPro vider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в System.Windows.Interop.HwndSource.InputF ilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndSubclass.DispatcherCallback Operation(Object o) в System.Windows.Threading.ExceptionWrappe r.InternalRealCall(Delegate callback, Object args, Int32 numArgs) в System.Windows.Threading.ExceptionWrappe r.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) Добавлено через 2 минуты Это при клиеке на кнопке "Продажа". При клике на другом контроле Exception тот же ну соответсвенно ссылки на код другие
0
|
![]() 6525 / 4101 / 1606
Регистрация: 09.05.2015
Сообщений: 9,564
|
|
17.10.2018, 14:32 | |
Что у вас в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKassaDLL\Con trols\InputNumber.xaml, номер строки "13" и позиция в строке "9"? Где-то там или в коже выставляется некорректное значение Height...
0
|
17.10.2018, 14:32 | |
Помогаю со студенческими работами здесь
20
преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода Подключение Python кода в С# проект Возможно ли вызвать функции неуправляемого консольного приложения в управляемом коде? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
|
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C#
Задание 1:
КЛАСС FORM 1
public partial class Form1 : Form
{
Spisok listin = new Spisok();
. . .
|
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
|
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
|
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
|
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
|
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
|
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
|
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
|
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг.
Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя.
Странные серые краски проникают и. . .
|