Re: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: Flammable Россия  
Дата: 25.11.12 17:22
Оценка: :)
Здравствуйте, csm7, Вы писали:

C>но как-то она некорректно работает


В чем выражается некорректность?
Переписать функцию из С++ под C# для микросхемы FT2232HL
От: csm7  
Дата: 24.11.12 11:39
Оценка:
Помогите переписать функцию из FTCSPI.dll для микросхемы FT2232HL
Оригинал на С++ таков

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#

[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.
В теле программы код таков

 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);


Заранее благодарен
Re: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: Nikolay_Ch Россия  
Дата: 24.11.12 12:24
Оценка:
C> [StructLayout(LayoutKind.Sequential)]
C> public struct FTH_Low_High_Pins{
C> bool bPin1LowHighState;
C> bool bPin2LowHighState;
C> bool bPin3LowHighState;
C> bool bPin4LowHighState;
C> bool bPin5LowHighState;
C> bool bPin6LowHighState;
C> bool bPin7LowHighState;
C> bool bPin8LowHighState;
А Вы точно уверены, что WinAPI32 тип BOOL кладется ровно в тип bool на C#?
Насколько я помню BOOL в WinAPI — это 4 байта (т.е. int), а bool в CLI (в общем случае) — это один байт...
Может здесь собака порылась?
Re: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: andrey82  
Дата: 24.11.12 13:12
Оценка:
Здравствуйте, csm7, Вы писали:

N_C>А Вы точно уверены, что WinAPI32 тип BOOL кладется ровно в тип bool на C#?

N_C>Насколько я помню BOOL в WinAPI — это 4 байта (т.е. int), а bool в CLI (в общем случае) — это один байт...
N_C>Может здесь собака порылась?

C>Заранее благодарен


Порекомендую статью по теме PInvoke and bool (or should I say BOOL)?
Re[2]: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: csm7  
Дата: 25.11.12 12:04
Оценка:
Да я посмотрел в C# SizeOf выдал 4 байта для BOOL Я попробовал выровнять на 1 байт но легче не стало
Re[3]: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: Nikolay_Ch Россия  
Дата: 25.11.12 17:38
Оценка:
Здравствуйте, csm7, Вы писали:

C>Да я посмотрел в C# SizeOf выдал 4 байта для BOOL Я попробовал выровнять на 1 байт но легче не стало

Мне кажется, что Вам надо выровнять не на 1 байт, а на 4-ре...
Т.е. исходная структура содержит набор четырехбайтных значений, а подсовываете вы ей структуру однобайтных...
Re: Переписать функцию из С++ под C# для микросхемы FT2232HL
От: codenet Россия  
Дата: 25.11.12 23:48
Оценка:
Здравствуйте, csm7, Вы писали:

C>Помогите переписать функцию из FTCSPI.dll для микросхемы FT2232HL



C>Я переписал на C#


C>
C>[DllImport("FTCSPI.dll", EntryPoint = "SPI_GetHiSpeedDeviceGPIOs")]
C>       unsafe public static extern ftc_status SPI_GetHiSpeedDeviceGPIOs(UInt32 pftHandle, [In, Out] ref FTH_Low_High_Pins pHighPinsInputData);

О Господи,а зачем столько всяких "штучек"?
[In,Out] еще и ref вдогонку,чтобы наверняка))?

[DllImport("FTCSPI.dll")]
static extern ftc_status SPI_GetHiSpeedDeviceGPIOs(UInt32 pftHandle, [In, Out] FTH_Low_High_Pins pHighPinsInputData);
FTCSPI.FTH_Low_High_Pins pFTH_Low_High_Pins = new FTCSPI.FTH_Low_High_Pins();
ft = FTCSPI.SPI_GetHiSpeedDeviceGPIOs(pftHandle,pFTH_Low_High_Pins);

как вы объявили FTC_STATUS ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.