Ho una libreria nativa con alcuni nativi ntype
in esso e vorrei p/invocare alcune funzioni in esso.PInvoke - Come eseguire il marshalling per 'SomeType * []'?
ho potuto schierare per:
foo1(ntype** p) ==> foo1(IntPtr[] p)
ma non sanno come fare per:
foo1(ntype*[] p) ==> foo1(<???> p)
Almeno IntPtr[]
non ha funzionato.
Modifica
La funzione non gestita che sto cercando di schierare con è:
extern mxArray* mclCreateSimpleFunctionHandle(mxFunctionPtr fcn);
dove mxFunctionPtr
è:
typedef void(*mxFunctionPtr)(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
questo rappresenta una chiamata per la seguente funzione MATLAB firma:
function [varargout] = callback(varargins)
%[
%% Do callback code %%
%]
Ovviamente, dalle mie aspettative, questo puntatore a funzione dovrebbe fornire me con 2 liste di mxArray*
:
- La lista degli argomenti di input (cioè prhs, inizializzato dalla parte di MATLAB)
- La lista degli argomenti di output (cioè plhs, tutto inizializzato a zero, ma in cui avrei dovuto scrivere in)
Attualmente dai test che ho fatto, esso restituisce solo per primati mxArray*
in plhs
e prhs
liste
funzioni C che richiedono puntatori e gli array sono irrimediabilmente ambigui. Non c'è differenza tra ntype ** e ntype * [] a meno che tu non abbia dato in qualche modo una semantica differente nel tuo codice. –