0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
.NET 4.x

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

21.11.2012, 01:07. Показов 1451. Ответов 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 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru