Logo UGIdotNET

Discussione 'InteropServices: Passare una classe'

# Pubblicato il 01 mar 2004 12.49 - Rispondi
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?


© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185