| Simone Novali |
InteropServices: Passare una classe
Ciao a tutti,
ho un problema un po incasinato da risolvere: Devo invocare una funzione di una dll non Com che ha la seguente firma: OMDLL_API int GetData(void* buff, int * len); in C# l'ho importata con DLL Import così: [DllImport("OMDLL.dll", CallingConvention=CallingConvention.StdCall)] public static extern int GetData(System.IntPtr buff, ref System.Int32 len); Nel mio caso però buff è una struttura del seguente tipo: Codice C (Struttura composta da altre strutture e da un array di strutture) /* Struttura da passare */ typedef struct answer_series { transaction_type_t transaction_type; uint16_t segment_number_n; uint16_t items_n; answer_series_item_t item [400]; } answer_series_t; /* Strutture accessorie */ typedef struct series { uint8_t country_c; uint8_t market_c; uint8_t instrument_group_c; uint8_t modifier_c; uint16_t commodity_n; uint16_t expiration_date_n; int32_t strike_price_i; } series_t; typedef struct upper_level_series { uint8_t country_c; uint8_t market_c; uint8_t instrument_group_c; uint8_t modifier_c; uint16_t commodity_n; uint16_t expiration_date_n; int32_t strike_price_i; } upper_level_series_t; typedef struct answer_series_item { series_t series; upper_level_series_t upper_level_series; int32_t contract_size_i; int32_t price_quot_factor_i; char ins_id_s [32]; char isin_code_s [12]; uint8_t suspended_c; char date_last_trading_s [8]; char time_last_trading_s [6]; char settlement_date_s [8]; char start_date_s [8]; char end_date_s [8]; char date_delivery_start_s [8]; char date_delivery_stop_s [8]; uint8_t series_status_c; } answer_series_item_t; typedef struct transaction_type { char central_module_c; char server_type_c; uint16_t transaction_number_n; } transaction_type_t; Come posso definire answer_series_t? |