Je travaille actuelelment en C# sur un logiciel qui utlise directshow pour construire des graphes de filtres et traiter des fichiers multimédias. Etant donné que je récupère un travail existant, je ne suis pas tout à fait libre des choix d'implémentation et je suis donc soumis à certaines contraintes. Des filtres directshow ont été développés, il s'agit donc d'objets COM. J'utilise la librairie open source DirectShowNet comme interface avec les objets COM. Une interface a été développée pour communiquer avec le filtre et récupérer quelques informations, j'ai donc complété directshownet avec les informations de cette interface en IDL pour pouvoir l'utiliser. Une de ces fonctions me pose problème. En effet, elle passe en paramètre une structure que l'objet COM doit initialiser correctement, pour que je puisse récupérer les informations qu'elle contient dans le code C#.
Code :
- public struct DLLRESULT
- {
- public string resultName;
- public uint nThresholds;
- public float[] thresholds;
- public float currentValue;
- public uint lastAckStart;
- public uint lastAckEnd;
- }
- [PreserveSig]
- int GetResultInfo(
- [In] uint res,
- [In] ref DLLRESULT _dllResult
- );
|
Puisque la structure doit être crée avant d'être envoyée, j'ai indiqué ce paramètre comme étant In et placé en référence. Le problème est que, lorsque j'utilise cette fonction, le hr code rendu correspond à une erreur de type pointeur null, donc l'objet COM se retrouve avec un _dllResult null alors qu'il a bien été créé côté C#. Je me demande donc si l'objet COM a bien accès à la mémoire managée de mon programme C#, et si ce n'est pas le cas, comment pourais-je faire pour utiliser cette fonction ? Serait il possible de créer un objet non managé dans le code C# ?
Message édité par eld le 18-08-2006 à 14:14:53