Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
.NET 4.x

Переписать функцию из С++ под C# для микросхемы FT2232HL

21.11.2012, 01:07. Показов 1444. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите переписать функцию из FTCSPI.dll для микросхемы FT2232HL
Оригинал на С++ таков
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct FTH_Low_High_Pins{
  BOOL  bPin1LowHighState;
  BOOL  bPin2LowHighState;
  BOOL  bPin3LowHighState;
  BOOL  bPin4LowHighState;
  BOOL  bPin5LowHighState;
  BOOL  bPin6LowHighState;
  BOOL  bPin7LowHighState;
  BOOL  bPin8LowHighState;
}FTH_LOW_HIGH_PINS, *PFTH_LOW_HIGH_PINS;
 
FTCSPI_API
FTC_STATUS WINAPI SPI_GetHiSpeedDeviceGPIOs(FTC_HANDLE ftHandle, PFTH_LOW_HIGH_PINS pHighPinsInputData);
Я переписал на C#

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[DllImport("FTCSPI.dll", EntryPoint = "SPI_GetHiSpeedDeviceGPIOs")]
       unsafe public static extern ftc_status SPI_GetHiSpeedDeviceGPIOs(UInt32 pftHandle, [In, Out] ref FTH_Low_High_Pins pHighPinsInputData);
 
 
        [StructLayout(LayoutKind.Sequential)]
        public  struct FTH_Low_High_Pins{
          bool  bPin1LowHighState;
          bool  bPin2LowHighState;
          bool  bPin3LowHighState;
          bool  bPin4LowHighState;
          bool  bPin5LowHighState;
          bool  bPin6LowHighState;
          bool  bPin7LowHighState;
          bool  bPin8LowHighState;
                                       };
но как-то она некорректно работает. Похоже некорректно представил указатель на структуру pFTH_Low_High_Pins.
В теле программы код таков
C#
1
2
 FTCSPI.FTH_Low_High_Pins pFTH_Low_High_Pins = new FTCSPI.FTH_Low_High_Pins();
 ft = FTCSPI.SPI_GetHiSpeedDeviceGPIOs(pftHandle, ref pFTH_Low_High_Pins);
Заранее благодарен
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2012, 01:07
Ответы с готовыми решениями:

Переписать процедуру под функцию
Нужно переписать следующий алгоритм нахождения седловой точки матрицы под функцию. Пробовал, не получилось совершенно никакого результата....

Переписать под функцию процедуру
Хочу переписать под функцию процедуру: procedure podschet(a:mas;n,c:integer;var k:integer); var i:integer; begin k:=0; for i:=1...

Переписать код под другую функцию
Может быть кто-то может помочь? Comment & FUNKCIJA f(X, Y): (X^3 - 1)/(-XY - 4), ja (X^3 - 1) > 0 (X^3 - 1)/(2*Y + 1),...

9
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
24.11.2012, 15:07  [ТС]
Эй народ есть кто живой на этом форуме
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
24.11.2012, 16:37
С++ sizeof(BOOL) == 1
C# sizeof(bool) == 4

следовательно:
C#
1
2
3
4
5
6
7
8
9
10
        [StructLayout(LayoutKind.Sequential)]
        public  struct FTH_Low_High_Pins{
          byte  bPin1LowHighState;
          byte  bPin2LowHighState;
          byte  bPin3LowHighState;
          byte  bPin4LowHighState;
          byte  bPin5LowHighState;
          byte  bPin6LowHighState;
          byte  bPin7LowHighState;
          byte  bPin8LowHighState;
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
24.11.2012, 23:52
Цитата Сообщение от Konctantin Посмотреть сообщение
С++ sizeof(BOOL) == 1
C# sizeof(bool) == 4
Наоборот. Объявление FTH_Low_High_Pins неверное.

csm7, посмотрите пример отсюда.
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
25.11.2012, 15:05  [ТС]
Да я обратил внимание на факт что С++ sizeof(BOOL) == 1 а в C# sizeof(bool) == 4
и уже переписал структуру
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
31
[StructLayout(LayoutKind.Sequential)]
        public  struct FTH_Low_High_Pins{
            [MarshalAs(UnmanagedType.I1)]
           public bool bPin1LowHighState;
            [MarshalAs(UnmanagedType.I1)]
           public bool bPin2LowHighState;
            [MarshalAs(UnmanagedType.I1)]
           public bool bPin3LowHighState;
            [MarshalAs(UnmanagedType.I1)]
            public bool bPin4LowHighState;
            [MarshalAs(UnmanagedType.I1)]
            public bool bPin5LowHighState;
            [MarshalAs(UnmanagedType.I1)]
            public bool bPin6LowHighState;
            [MarshalAs(UnmanagedType.I1)]
            public bool bPin7LowHighState;
            [MarshalAs(UnmanagedType.I1)]
            public bool bPin8LowHighState;
            public FTH_Low_High_Pins(bool _bPin1LowHighState, bool _bPin2LowHighState, bool _bPin3LowHighState, bool _bPin4LowHighState,
                                     bool _bPin5LowHighState, bool _bPin6LowHighState, bool _bPin7LowHighState, bool _bPin8LowHighState)
            {
                bPin1LowHighState = _bPin1LowHighState;
                bPin2LowHighState = _bPin2LowHighState;
                bPin3LowHighState = _bPin3LowHighState;
                bPin4LowHighState = _bPin4LowHighState;
                bPin5LowHighState = _bPin5LowHighState;
                bPin6LowHighState = _bPin6LowHighState;
                bPin7LowHighState = _bPin7LowHighState;
                bPin8LowHighState = _bPin8LowHighState;
            }
                                       };
но больному легче не стало

Добавлено через 11 минут
SSTREGG,
а вот в примере используется совсем другие функции для микросхемы FT2232C там указатели на структуры не нужны
К тому же я выровнял поля структуры с помощью
C#
1
 [MarshalAs(UnmanagedType.I1)]
на 1 байт
Это результата не дало
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
25.11.2012, 15:44
csm7, то что привел Konctantin - это неверное определение структуры, sizeof( BOOL ) == 4.
Цитата Сообщение от csm7 Посмотреть сообщение
совсем другие функции для микросхемы FT2232C
Какие другие? Там нету SPI_GetHiSpeedDeviceGPIOs ? Внимательней посмотрите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public struct FTH_LOW_HIGH_PINS
        {
            public bool bPin1LowHighState;
            public bool bPin2LowHighState;
            public bool bPin3LowHighState;
            public bool bPin4LowHighState;
            public bool bPin5LowHighState;
            public bool bPin6LowHighState;
            public bool bPin7LowHighState;
            public bool bPin8LowHighState;
        }
 
        [DllImportAttribute("ftcspi.dll", CallingConvention = CallingConvention.Cdecl)]
        static extern uint SPI_GetHiSpeedDeviceGPIOs(IntPtr ftHandle, out FTH_LOW_HIGH_PINS pHighPinsInputData);
Я сомневаюсь что на офф. сайте будут левые примеры.
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
25.11.2012, 15:49  [ТС]
SSTREGG, Извиняюсь вышла ошибочка Но я попробовал подход который приводят в примере Функция думала довольно долго но в итоге оболочка выдала сообщение " A call PInvoke function USB-SPI!USB_SPI.FTCSPI::GetHiSpeedDeviceGPIO s' has unbalanced the stakThis is likely because the managed Pinvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmamaged signature "
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
25.11.2012, 16:03
csm7, моя ошибка тоже есть, я не посмотрел саму DLL. Если скачивать её по ссылке с офф. сайта, то она расходится с ихним же примером.
C#
1
2
[DllImportAttribute("ftcspi.dll")]
static extern uint SPI_GetHiSpeedDeviceGPIOs(uint ftHandle, out FTH_LOW_HIGH_PINS pHighPinsInputData);
Так попробуйте.
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
25.11.2012, 16:16  [ТС]
SSTREGG, Да уже так не ругается но думает долго и выдает результат работы функции Failed_to_Complete_Command = 20, // cannot change, error code mapped from FT2232c classes

Добавлено через 6 минут
Попробовал так
C#
1
 [DllImport("FTCSPI.dll", EntryPoint = "SPI_GetHiSpeedDeviceGPIOs")]
та же картина
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
25.11.2012, 16:33
csm7, так функция же отработала и вернула конкретный результат. Или Вы хотите чтобы Вам сказали почему она вернула именно FTC_FAILED_TO_COMPLETE_COMMAND? Так это можно бесконечно гадать, я не работал с этой DLL и не могу сказать почему функция возвращает 20. Могу лишь посоветовать поискать ошибку в другом месте.

Добавлено через 1 минуту
Цитата Сообщение от csm7 Посмотреть сообщение
Попробовал так
Это не обязательно, CLR сама поймет что нужно вызвать функцию с именем SPI_GetHiSpeedDeviceGPIOs, без явного указания EntryPoint.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2012, 16:33
Помогаю со студенческими работами здесь

Панель под микросхемы
Добрый день. Мне необходимо использовать панельки под микросхемы, типа вотетой http://www.chipdip.ru/product/scl-32.aspx , только есть...

Работа с FIFO буфером микросхемы UARD 16550A (RS232) под DOS
Доброго времени суток, если кто знает, подскажите: как работать с FIFO буфером микросхемы UARD 16550A (RS232) под DOS. Интересует...

Переписать код из ASM на С++ для сборки под x64
Задача: переписать код из ASM на C++ для сборки под X64 Ибо я ASM не знаю #include "stdafx.h" #include...

Переписать функцию для работы с двумя очередями
Имеются 2 очереди, функция для добавления элемента в очередь. Как сделать так, чтобы она работала и для 2 очереди? struct QueueNumber1 ...

FT2232HL и 2 UART
Платку сделал по даташиту (только еепром не подключал). Кручусь по сайту создателей и не могу понять. Как и чем(какой файл) надо прошить,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru