[ void* C++ ] vs [C#] [Résolu]

DarckAnar 4 Messages postés mercredi 10 mars 2004Date d'inscription 7 octobre 2004 Dernière intervention - 6 oct. 2004 à 15:10 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 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 ...
Afficher la suite 

8 réponses

Répondre au sujet
DarckAnar 4 Messages postés mercredi 10 mars 2004Date d'inscription 7 octobre 2004 Dernière intervention - 7 oct. 2004 à 01:11
+3
Utile
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 ...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de DarckAnar
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 6 oct. 2004 à 17:08
0
Utile
donne la doc de ce parametre là pour voir

Cocoricoooooooo !!!!
Commenter la réponse de cs_coq
DarckAnar 4 Messages postés mercredi 10 mars 2004Date d'inscription 7 octobre 2004 Dernière intervention - 6 oct. 2004 à 17:45
0
Utile
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 ...
Commenter la réponse de DarckAnar
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 6 oct. 2004 à 18:12
0
Utile
hum
et tu n'aurais pas une idée de la forme des données qui seront placées dans AudioBuffer ?

Cocoricoooooooo !!!!
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 6 oct. 2004 à 18:21
0
Utile
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 !!!!
Commenter la réponse de cs_coq
DarckAnar 4 Messages postés mercredi 10 mars 2004Date d'inscription 7 octobre 2004 Dernière intervention - 6 oct. 2004 à 20:21
0
Utile
- 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) ...
Commenter la réponse de DarckAnar
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 6 oct. 2004 à 22:54
0
Utile
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
Commenter la réponse de TheSaib
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 7 oct. 2004 à 08:49
0
Utile
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 !!!!
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.