MIDL tipi complessi come metodo di parametri dell'interfaccia
-
01-10-2019 - |
Domanda
Vorrei sapere se forse ci sono alcune buone soluzioni per la gestione tipi complessi non importabili in IDL. La mia più grande preoccupazione sta usando tipi _m128 vettore per le istruzioni simmed IE. XMVECTOR. __declspec non viene riconosciuto dal compilatore MIDL quindi l'importazione del tipo di dati __m128 è fuori questione. Ho guardato in utilizzando wire_marshal per fare questo, ma penso che deve essere consapevole del typedef del tipo __m128. Se c'è un modo per foreword_declare XMVECTOR per l'uso con wire_marshal non ho la più pallida idea di come avrei fatto così.
Ho pensato di nascondere il tipo incapsulando esso che sarà già essere che sto incapsulare i tipi di dati per la riflessione. Ho giocato in giro con un paio di idee qui tra cui eredita da entrambi COM e le interfacce C ++. Niente qui sembrava troppo promettente.
Un sacco di persone mi hanno detto di non utilizzare COM e sinceramente hanno speso un sacco di ore, non di codifica e solo cercando di capire questa roba. La mia logica continua a vedere un sacco di vantaggi di utilizzare COM e le alternative tra cui MYCOM aspetto altrettanto in termini di tempo e crivellata di problemi. Se questo è il mio più grande problema con l'utilizzo COM dovrei tenere prefazione in movimento o sono le soluzioni andando a rallentare questa applicazione, tenendo presente la sua dipendenza da presentazione grafica e la modellazione computazionale tempo reale? Sto cercando di fare cose su scala di rendere le aziende agricole o di nubi o qualcosa del genere ... parlo grande e so che sono niubbo quindi per favore, non cercando di impressionare solo cercando di diventare informato ... ho fatto un sacco della ricerca!
thx, BekaD:
Soluzione
lascia un po 'di un gusto divertente nella mia bocca: \
typedef XMVECTOR* PTR_XMVECTOR;
typedef struct _ARRAY_XMVECTOR {
unsigned int size_array;
[size_is(size_array*SIZE_OF_XMVECTOR)] PTR_XMVECTOR VECTOR_ARRAY;
} ARRAY_XMVECTOR;
typedef [wire_marshal(MARSHAL_AS)] ARRAY_XMVECTOR MY_VECTOR_ARRAY;
I avrebbe modificato in o aggiunto come un commento, ma probabilmente il più vicino questa discussione verrà a una risposta ... probabilmente la più ovvia .... dispiace per rispondere alla mia domanda: /