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

Подключение неуправляемого кода

15.10.2018, 19:56. Показов 3761. Ответов 25
Метки нет (Все метки)

Есть код на С++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct auth_answer{
   int TType;             /**< [in] тип транзакции. см ::OpetationTypes */
   unsigned long Amount;  /**< [in] сумма в копейках                    */
   char RCode[3];         /**< [out] код результата авторизации         */
   char AMessage[16];     /**< [out] текст результата авторизации       */
   int  CType;            /**< [in,out] тип карты                       */
   char* Check;           /**< [out] образ чека, должен освобождаться GlobalFree в вызывающей программе */
};
 
struct auth_answer5{
  struct auth_answer auth_answ;   /**< [in]  Основные параметры операции. См. ::auth_answer */
  char   RRN[MAX_REFNUM];         /**< [in,out] Номер ссылки операции, присвоенный хостом. Используется
                                                для операций возврат и множественной авторизации.
                                                Содержит уникальный 12-значный ссылочный номер.
                                                При предавторизации это поле является выходным
                                                (его заполняет библиотека pilot_nt.dll), а при
                                                завершении расчета – входным (значение должно 
                                                быть заполнено вызывающей программой; оно должно
                                                совпадать со значением, возвращенным при предавторизации).*/
  char   AuthCode[MAX_AUTHCODE]; /**< [out] Код авторизации. 7 байт.                       */
};
 
PILOT_NT_API int card_authorize(char track2, struct auth_answer auth_answer);
Сделал на C# аналог не без помощи форумчан

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public unsafe struct auth_answer
        {
            public OpetationTypes TType { get; set; }
            public uint  Amount { get; set; }
            public fixed byte RCode[3];
            public fixed byte AMessage[16];
            public int CType { get; set; }
            public IntPtr check;            
        }
 
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public unsafe struct auth_answer5
        {
            public auth_answer auth_answ;
            public fixed byte RRN[MAX_REFNUM];
            public fixed byte AuthCode[MAX_AUTHCODE];
         }
 
         [DllImport(".\\WIN\\pilot_nt.DLL", EntryPoint = "_card_authorize5", CallingConvention = CallingConvention.StdCall)]
        private static extern int card_authorize5(string truck,ref auth_answer5 InStrict);
Все работает, но как вытащить check?
C#
1
chequeSTR = Marshal.PtrToStringAnsi(Auth_answer.auth_answ.check);
дает пустую строку
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2018, 19:56
Ответы с готовыми решениями:

Запуск неуправляемого кода внутри кода c#
часто требуется при выполнении программы запускать исполняемые файлы (exe) с ключами. Для этого...

Быстродействие управляемого и неуправляемого кода
начал изучать небезопасный код,написал прогу в ней 2 функции одна с управляемым кодом вторая...

Вызов неуправляемого кода из длл
Замучался с маршилингом! Есть функция в длл: RetCode = HMM_Path_Init( char *path ); RetCode –...

Как обрабатывать исключения из неуправляемого кода?
Здравствуйте. В приложении используется сторонняя библиотека на c++, в которой периодически...

25
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
16.10.2018, 09:48 2
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
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
char* в C# как string должен быть, а не IntPtr как я помню, попробуйте в такой вариации, может потому и нету данных. Да и это единственное чего нету? остальные данные приходят?

Добавлено через 3 минуты
Есть вот такая статья у майков: https://docs.microsoft.com/en-... orm-invoke
описывает какой тип какому соответствует, думаю будет полезна.
Это единственная проблема осталась. Есть еще более глобальная, но пока на этом остановлюсь.
Сейчас проверю.

Добавлено через 3 минуты
Цитата Сообщение от VicNic Посмотреть сообщение
Это единственная проблема осталась. Есть еще более глобальная, но пока на этом остановлюсь.
Сейчас проверю.
Вообще вылетает.

Добавлено через 17 секунд
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
char* в C# как string должен быть, а не IntPtr как я помню, попробуйте в такой вариации, может потому и нету данных. Да и это единственное чего нету? остальные данные приходят?

Добавлено через 3 минуты
Есть вот такая статья у майков: https://docs.microsoft.com/en-... orm-invoke
описывает какой тип какому соответствует, думаю будет полезна.
Вообще вылетает
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
16.10.2018, 11:10 4
код как сделали, и вылетает с какой ошибкой то + убери из своих структур unsafe
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
16.10.2018, 12:10  [ТС] 5
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
код как сделали, и вылетает с какой ошибкой то + убери из своих структур unsafe
Если убрать unsafe. то как объявить public fixed byte RCode[3]?

C++
1
char RCode[3];

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public unsafe struct auth_answer
        {
            public OpetationTypes TType { get; set; }
            public uint  Amount { get; set; }
            public fixed byte RCode[3];
            public fixed byte AMessage[16];
            public int CType { get; set; }
            public string check;            
        }
 
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public unsafe struct auth_answer5
        {
            public auth_answer auth_answ;
            public fixed byte RRN[MAX_REFNUM];
            public fixed byte AuthCode[MAX_AUTHCODE];
         }
а сам вызов

C#
1
   chequeSTR = Auth_answer.auth_answ.check
Добавлено через 13 минут
Проблема в общем следующая:
Есть рабочая программа. К ней нужно было подцепить Сберовские терминалы. Была библиотека, в которой уже была реализована работа с аналогичными терминалами от других поставщиков.
Подцепил все быстро под COM. Но после первой успешной транзакции в программе, программа вылетала System.ArithmeticException при клике на любом контроле.
Попробовал без COM напрямую через pilot_nt.dll. (пока только чек не удалось получить) ТО же самое. После первой успешной, любой клик на контроле и программа вылетает.

Печаль в том, что тестовое приложение с этой же библиотекой работает без вылетов в обоих реализациях.
Куда смотреть? МОЗГ взрывается. неделя бессоных ночей!
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
16.10.2018, 12:16 6
VicNic, у Вас обычный char в C# он такой же char, только массив иначе объявляется:
C#
1
char[] RCode
Добавлено через 1 минуту
p.s. я же дал Вам ссылку по мапингу типов, там можно это всё легко глянуть было

Добавлено через 1 минуту
по поводу Вашей проблемы тут уже надо смотреть целиком Ваш код, и код "любого контрола" что они делают, и смотреть что именно вызывает такую ошибку.
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
16.10.2018, 12:33  [ТС] 7
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
VicNic, у Вас обычный char в C# он такой же char, только массив иначе объявляется:
C#
1
char[] RCode
Добавлено через 1 минуту
p.s. я же дал Вам ссылку по мапингу типов, там можно это всё легко глянуть было

Добавлено через 1 минуту
по поводу Вашей проблемы тут уже надо смотреть целиком Ваш код, и код "любого контрола" что они делают, и смотреть что именно вызывает такую ошибку.
Не думаю, что нужно весь код лопатить. Вызов не изменился. Расширился функционал одной из сборок. Если в ней переключиться на работу с уже ранее подключенными терминалами - все ок. Как только натравливаешь н аСБер - ситуацию описал. Предполагаю, что что то все-таки в Сбере.
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
16.10.2018, 12:41 8
Цитата Сообщение от VicNic Посмотреть сообщение
Не думаю, что нужно весь код лопатить. Вызов не изменился. Расширился функционал одной из сборок. Если в ней переключиться на работу с уже ранее подключенными терминалами - все ок. Как только натравливаешь н аСБер - ситуацию описал. Предполагаю, что что то все-таки в Сбере.
я Вам даю ответы в рамках Вашего вопроса, где и как используется я уж не в курсе. смотрите кто Вам даёт эксепшен и как вызывается данный метод, в данном варианте отладчик Ваш самый лучший друг будет
0
Эксперт .NET
6224 / 3862 / 1555
Регистрация: 09.05.2015
Сообщений: 9,127
16.10.2018, 12:47 9
А почему у вас
C++
1
char track2
а в C#
C#
1
string truck
А еще возможно нужно задать структурам Pack.

Цитата Сообщение от VicNic Посмотреть сообщение
Попробовал без COM напрямую через pilot_nt.dll. (пока только чек не удалось получить) ТО же самое. После первой успешной, любой клик на контроле и программа вылетает.
Кстати на github видел обертку над pilot_nt.dll на Delphi, так там они либу каждый раз загружают и после вызова выгружают (LoadLibrary/FreeLibrary).
0
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
17.10.2018, 11:29 10
Зачем вообще переводить C++ на C# ? Существует канал доступа к программе на C++ в неуправляемой среде из программы на C#. Пишите основу программы на C# для управляемой среды и выполняйте код на C++ в неуправляемой среде. Все делается через этот канал доступа. Также приведен пример как все это делать, конкретно для подсчета суммы элементов матрицы.
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
17.10.2018, 12:31  [ТС] 11
Цитата Сообщение от B_S_V Посмотреть сообщение
Зачем вообще переводить C++ на C# ? Существует канал доступа к программе на C++ в неуправляемой среде из программы на C#. Пишите основу программы на C# для управляемой среды и выполняйте код на C++ в неуправляемой среде. Все делается через этот канал доступа. Также приведен пример как все это делать, конкретно для подсчета суммы элементов матрицы.
Первоначально вставил свой вопрос в темах для начинающих.
Кинули на эту задачу. Приходится "на лету" язык изучать. Поэтому прошу помощи чуть более поконкретнее.
На С++ это пример из документации для интеграторов.

Добавлено через 34 минуты
Сейчас все откатил на работу с COM.
Все чеки получаю. Тестовая форма работает идеально. После вызова из основного приложения, первая транзакция проходит успешно. Программа не вылетает. Но стоит на этой форме кликнуть на любой control - вылетает с System.ArithmeticException
Так как переключение на работу с другим терминалом не вызвает подобных вылетов, подозреваю что проблема в самом подключении и вызове через COM.
Подключал просто через добавление Ссылки.

Это подключение


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
      
    public static partial class SberCreditCardsService
    {
 
 
public static bool Sale(decimal amount)
        {
            try
            {
                Server wshShell2 = new Server();
                wshShell2.SParam("Amount", decimal.ToInt32(amount * 100));
                lastResponce = wshShell2.NFun((int)FunctionTypes.OP_PURCHASE);
                GetErroMSG(lastResponce);
                if (lastResponce == 0)
                {
                    //rRN = wshShell2.GParamString("RRN");
                    //aCode = wshShell2.GParamString("AuthCode");
                    //chequeSTR = wshShell2.GParamString("Cheque1251");
                    //rRN = GetSTRFromByteArr(Auth_answer.RRN, MAX_RRN);
 
                }
                return lastResponce == 0 ? true : false;
            }
            catch(Exception E)
            {
                Log.Error(E.ToString());
                return false;
            }
        }  
}
сам вызов из основной программы

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
            
.
try
            {
                if (payType == OrderSaleType.CreditCard)
                {
                   if (SberCreditCardsService.Sale(orderData.Total) == false)
                        throw new PayCardException();
                   else
                    {
                        //rrn = sber.GetRRN();
                        //acode = sber.GetACode();
                        Locator.GetService<PayCardService>().GetTrensactionCode(ref rrn, ref acode);                        
                    }
 
                }
                Locator.GetService<DBUtills>().ProcessOrder(po_id, orderData, rrn, payType, acode);
            }
            catch (PayCardException)
            {
                if ((string.IsNullOrEmpty(rrn) == false) && (payType == OrderSaleType.CreditCard))
                    Locator.GetService<PayCardService>().EmergencyCancelation(orderData.Total);
                throw;
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
                throw;
            }
0
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
17.10.2018, 12:37 12
Это здесь

https://sites.google.com/site/... home/files

Скачайте Instruction.docs, далее - Глава 4. Методы взаимодействия с программными средствами на основе языка С.
На стр. 113 тот же пример для языка BVM.

Добавлено через 6 минут
Посмотрите пример, может, подойдет. Не уверен, что ваш случай, и тем не менее.
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.10.2018, 12:43 13
VicNic, покажите что происходит в коде любого control который вызывает ArithmeticException, и посмотрите стек вызова у ошибки, откуда "ноги" растут то?
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
17.10.2018, 13:19  [ТС] 14
Подключение неуправляемого кода
0
1 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 33
17.10.2018, 13:20 15
Интересная задачка. Я бы с чего начал: уж если достучался указателем до массива char в неуправляемой среде, попробовал бы поэлементно вытаскивать отдельные символы, пока не наткнусь на нулевой. А уж из массива символов собрать строку не проблема.
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.10.2018, 13:30 16
VicNic, видно конечно не очень, но по стеку виднеется вызов метода если не путаю Execute (плохо видно на таких скринах), судя по тому откуда начинается стэк у Вас WPF приложение, значит скорей всего этот метод стоит на биндинге, нужно смотреть что в них происходит, возможно передаются данные или идёт обращение к несуществующим параметрам у терминала. На текущий момент Вам нужно отлаживать Ваше ПО начиная с метода описанного выше, я не имея понятия что там и как вообще всё устроено могу только советовать. Вам нужно найти точку "входа" для этой функции, ставить точку остановки и поэтапно смотреть какие параметры и куда уходят.

Добавлено через 52 секунды
B_S_V, у меня такое чувство что вы робот и пишите просто набор слов чуть чуть подходящие под тему...
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 20
17.10.2018, 13:42  [ТС] 17
Не робооооооообот я.
Просто не знаю как к этому подступиться. Не хватает знаний и опыта.

Добавлено через 1 минуту
И так как, ответы приходят с опозданием, уже кучу вещей сам пробую. Поэтому такие "скачки" в потоке мысли.

Добавлено через 6 минут
Это код уже после вызова терминала СБера. Работа с терминалом закончилась. То есть остается окно с выбором мест. Отмечаю новые места (можно не отмечать), нажатие на любую кнопку, приводит к этому событию.

Добавлено через 52 секунды
ЕСли терминал СБер не вызывать, то все работает как часы. Так же все раюотает, еслы переключить вызов вместо терминала СБер на любой другой из поддерживаемых.
0
909 / 794 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.10.2018, 13:57 18
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  [ТС] 19
2018-10-17 14:26:27,479 [9] ERROR TT.TicketKassa.App [(null)] - System.Windows.Markup.XamlPars eException: "Задание свойства "System.Windows.FrameworkEleme nt.Height" вызвало исключение.": номер строки "13" и позиция в строке "9". ---> System.ArithmeticException: Переполнение или потеря точности в арифметической операции.
в System.Double.Equals(Object obj)
в System.Object.Equals(Object objA, Object objB)
в System.Windows.DependencyObjec t.UpdateEffectiveValue(EntryIn dex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
в System.Windows.DependencyObjec t.SetValueCommon(DependencyPro perty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
в System.Windows.Baml2006.WpfKno wnMemberInvoker.SetValue(Objec t instance, Object value)
в MS.Internal.Xaml.Runtime.ClrOb jectRuntime.SetValue(XamlMembe r member, Object obj, Object value)
в MS.Internal.Xaml.Runtime.ClrOb jectRuntime.SetValue(Object inst, XamlMember property, Object value)
--- Конец трассировки внутреннего стека исключений ---
в System.Windows.Markup.WpfXamlL oader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
в System.Windows.Markup.WpfXamlL oader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
в System.Windows.Markup.XamlRead er.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
в System.Windows.Application.Loa dComponent(Object component, Uri resourceLocator)
в TT.TicketKassa.Controls.InputN umber.InitializeComponent() в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\Controls\InputNumber.xa ml:строка 1
в TT.TicketKassa.Controls.InputN umber.ShowPayWindow(String message, OrderSaleType& orderSaleType) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\Controls\InputNumber.xa ml.cs:строка 25
в TT.TicketKassa.Services.Proces sOrder.ProcessOrderService(Boo lean fast, Int32 showId, Int32 clientID, OrderData orderData, String seatsString, Int32 Count, Byte typeseatForUpdate) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\Services\ProcessOrder.c s:строка 46
в TT.TicketKassa.ViewModels.Repe rtoryViewModel.Sale0(Boolean fast) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\ViewModels\RepertoryVie wModel.cs:строка 887
в TT.TicketKassa.ViewModels.Repe rtoryViewModel.Go(Boolean fast) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\ViewModels\RepertoryVie wModel.cs:строка 797
в TT.TicketKassa.ViewModels.Repe rtoryViewModel.Sale(Object obj) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\ViewModels\RepertoryVie wModel.cs:строка 787
в AttachedCommandBehavior.Action ExecutionStrategy.Execute(Obje ct parameter) в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\Views\Commands\Executio nStrategy.cs:строка 71
в (CommandBehaviorBinding , Object , RoutedEventArgs )
в System.Windows.RoutedEventHand lerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.Invo keHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.Raise EventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.Raise Event(RoutedEventArgs e)
в System.Windows.Controls.Primit ives.ButtonBase.OnClick()
в System.Windows.Controls.Button .OnClick()
в System.Windows.Controls.Primit ives.ButtonBase.OnMouseLeftBut tonUp(MouseButtonEventArgs e)
в System.Windows.UIElement.OnMou seLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
в System.Windows.Input.MouseButt onEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget)
в System.Windows.RoutedEventArgs .InvokeHandler(Delegate handler, Object target)
в System.Windows.RoutedEventHand lerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.Invo keHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.ReRai seEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
в System.Windows.UIElement.OnMou seUpThunk(Object sender, MouseButtonEventArgs e)
в System.Windows.Input.MouseButt onEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget)
в System.Windows.RoutedEventArgs .InvokeHandler(Delegate handler, Object target)
в System.Windows.RoutedEventHand lerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.Invo keHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.Raise EventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.Raise TrustedEvent(RoutedEventArgs args)
в System.Windows.UIElement.Raise Event(RoutedEventArgs args, Boolean trusted)
в System.Windows.Input.InputMana ger.ProcessStagingArea()
в System.Windows.Input.InputMana ger.ProcessInput(InputEventArg s input)
в System.Windows.Input.InputProv iderSite.ReportInput(InputRepo rt inputReport)
в System.Windows.Interop.HwndMou seInputProvider.ReportInput(In tPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
в System.Windows.Interop.HwndMou seInputProvider.FilterMessage( IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в System.Windows.Interop.HwndSou rce.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(I ntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.Dispatch erCallbackOperation(Object o)
в System.Windows.Threading.Excep tionWrapper.InternalRealCall(D elegate callback, Object args, Int32 numArgs)
в System.Windows.Threading.Excep tionWrapper.TryCatchWhen(Objec t source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

Добавлено через 2 минуты
Это при клиеке на кнопке "Продажа". При клике на другом контроле Exception тот же ну соответсвенно ссылки на код другие
0
Эксперт .NET
6224 / 3862 / 1555
Регистрация: 09.05.2015
Сообщений: 9,127
17.10.2018, 14:32 20
Что у вас в D:\ProjectVS15\cinema-prof\trunk\src\net\TT.TicketKa ssaDLL\Controls\InputNumber.xa ml, номер строки "13" и позиция в строке "9"? Где-то там или в коже выставляется некорректное значение Height...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 14:32
Помогаю со студенческими работами здесь

Из неуправляемого кода стороннего приложения, передать в свое приложение массив байт
Опишу сначала суть задачи, 1. Требуется из неуправляемого кода стороннего приложения, передавать в...

преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
есть COM интерфейс с методом: virtual /* */ HRESULT STDMETHODCALLTYPE OnReceivePacket( ...

Подключение Python кода в С# проект
Есть ли какие-то способы интегрировать python код в c# проект?

Возможно ли вызвать функции неуправляемого консольного приложения в управляемом коде?
Всем привет! Ребят вопрос общего характера. Есть консольное приложение на C. Возможно ли вызвать...


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

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

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