[ void* C++ ] vs [C#]

Résolu
DarckAnar Messages postés 4 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 7 octobre 2004 - 6 oct. 2004 à 15:10
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 7 oct. 2004 à 08:49
Bonjour,

J'importe une méthode d'une dll C++ dans un projet C#. La doc technique (C++) me fournit les types des 4 arguments. Au débugage j'ai une erreur du type : "La référence d'objet n'est pas définie à une instance d'un objet."

Je suis presque sur qu'il s'agit d'un type d'argument qui ne conviens pas ... un buffer audio qui est donné dans la doc comme (void*). J'ai essayé d'autres type genre byte[] etc ... sans success :sad) ...

J'aimerais pouvoir trouver un type de substitution au void* pour un buffer audio sans passer par du "unsafe" ... et de surcroix faire marcher cette méthode !

Merci d'avance pour votre aide ...

8 réponses

DarckAnar Messages postés 4 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 7 octobre 2004
7 oct. 2004 à 01:11
Merci encore pour votre aide ...

Un ami à pu passer et la méthode 'Marche' ...

Il ne s'agissait pas du buffer :blush) ... byte[] convient très bien ... mais en fait le (unsigned long * u32NbrOfSamples) de la doc C++ ne trouvais pas son équivalent dans ( uint NbrOfSamples ) mais dans ( ref uint NbrOfSamples ) !!!

C'est la fête :big) ... Champagne pour tout le monde ... lol ...
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 oct. 2004 à 17:08
donne la doc de ce parametre là pour voir

Cocoricoooooooo !!!!
0
DarckAnar Messages postés 4 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 7 octobre 2004
6 oct. 2004 à 17:45
Dans le doute et au cas voici la doc pour cette méthode ...

Doc C++ :

Retour : function returns a buffer with the specified number of recorded samples in it. It also retrieves the Status of the audio in component
hAudioIn : Handle of the audio-in device
NbrOfSamples : (Input) The requested number of samples to be filled in the AudioBuffer. (Output) The actual number of recorded audio samples written in pAudioBuffer.
AudioBuffer : Buffer that contains the recorded samples (Output).
AudioInInfo : Information about the audio (Output)

struct AUDIOININFO {(une enum) eStatusInfo;unsigned long u32SamplesAvailable;};

long audioinGetSamples(void* hAudioIn, unsigned long * u32NbrOfSamples, void * AudioBuffer, AUDIOININFO * pAudioInInfo)

Mon code C# (safe) :

[DllImport("ma_dll_qui_me_soule.dll")]
public static extern int audioinGetSamples(IntPtr hAudioIn, uint NbrOfSamples, out InPtr AudioBuffer, out AUDIOININFO AudioInInfo);

--> l'erreur pour cette méthode après appel : "La référence d'objet n'est pas définie à une instance d'un objet." !

Merci ... encore ...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 oct. 2004 à 18:12
hum
et tu n'aurais pas une idée de la forme des données qui seront placées dans AudioBuffer ?

Cocoricoooooooo !!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 oct. 2004 à 18:21
sinon une définition "standard" pourrait être
[MarshalAs(UnmanagedType.AsAny)] object AudioBuffer


mais reste a voir comment definir l'objet qui sera passé

ta dll est accessible publiquement ?

Cocoricoooooooo !!!!
0
DarckAnar Messages postés 4 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 7 octobre 2004
6 oct. 2004 à 20:21
- Je n'ai aucune idée de la forme des données qui seront placé dans AudioBuffer

- Je suis pas sur de comprendre ta question sur l'accessibilité de la dll ... j'importe les méthodes de cette dll dont j'ai besoin via [DllImport...] public static extern ...

:shy) ...
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
6 oct. 2004 à 22:54
tu peux garder le void* si tu fais du unsafe.

exemple :

[DLLomport (...)]
static extern unsafe IntPtr mafunc(
string bidule , void* buffer)

::|The S@ib|::
MVP C#.NET
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 oct. 2004 à 08:49
lol
je n'avais pas fait gaffe aux autres parametres
quand je parlais d'accessibilité (me rend compte que c'etait un peu tordu comme question) je parlais de la dll_qui_te_soulait.dll, savoir si je pouvais la recup quelquepart pour tester
mais comme tu as resolu ton prob ce n'est plus la peine lol

Cocoricoooooooo !!!!
0
Rejoignez-nous