Appel DLL C++ avec tableau +in/out [Résolu]

Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- - Dernière réponse : Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 20 oct. 2008 à 14:24
Bonjour,

Je dois appeler un méthode d'une DLL C++  (xxx_G) dans mon programme C#. Cette méthode possède un structure d'entrée/sortie en argument. J'ai trouvé le principe mais il me manque quelques infos... Pour m'aider, j'ai un exemple de programme en C++ qui appelle cette DLL. Pourriez vous m'aider à faire l'appel de cette DLL Merci

Voici le source C++

Header_G.h
#ifndef

HEADER_G_H_

#define HEADER_G_H_

typedef
struct
{

float H;

float B;

float T[3];

short TYPE

char  TYPE2

short RET[12][3];

} inoutG, *lpinoutG;

extern
"C"
void XXX_G(lpinoutG t);

extern
"C"
void trace();

#endif
/*HEADER_G_H_*/
le programme de test C++
...
int main()
{
   lpinoutGOP2 param;
  
param->H = 30.0;
   param->B = 2500.0;

   param->T[0] = 30.0;

   param->T[1] = 31.0;

   param->T[2] = 32.0;

   ...
   xxx_G(param);

...

Voici mon programme C# de test

[

StructLayout (
LayoutKind.Sequential)]

public
struct
TPARAM
{
[
MarshalAs(
UnmanagedType.R4)]
public
float H;

[
MarshalAs(
UnmanagedType.R4)]
public
float B;

[
MarshalAs(
UnmanagedType.LPArray)]
public
float[] T;

[
MarshalAs(
UnmanagedType.I2)]
public
short TYPE;

[
MarshalAs(
UnmanagedType.AnsiBStr)]
public
char TYPE2;

[
MarshalAs(
UnmanagedType.LPArray)]
public
short[,] RETOUR;

}

[
DllImport(
"xxx_G.dll")]

public
static
extern
void PTD_GOP2(
[
MarshalAs(
Unmana
gedType.LPStruct)]
ref
TPARAM param);
Public Form1 ()
{
xxx_G (ref param)
}

DT
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
3
Merci
Salut, il ne me semble pas possible de passer le dernier paramètre sous forme de tableau à 2 dimensions, tu pourras par exemple utiliser "la notation tableau" avec un pointeur fixé sur le tableau "RET".

[ StructLayout( LayoutKind.Sequential ) ]
private struct InOutG
{
    public float H;
    public float B;
    [ MarshalAs( UnmanagedType.ByValArray, SizeConst = 3 ) ]
    public float[ ] T;
    public short TYPE;
    public byte TYPE2;
    [ MarshalAs( UnmanagedType.ByValArray, SizeConst = 12*3 ) ]
    public short[ ] RET;
}


[ DllImport( "xxx_G.dll" ) ]
private static extern void XXX_G( ref InOutG t );

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 86 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore

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.