begin process at 2010 02 09 23:38:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Mono

 > 

Général

 > 

Reflexion et Cast


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Reflexion et Cast

lundi 11 février 2008 à 15:12:13 | Reflexion et Cast

pcayrol

Bonjour,

Je récupère un pointeur [I][B]pointeurManaged [/B][/I]sur un structure non managée (déclarée et initialisée dans une dll) via une méthode Get_Adresse exportée.
[CODE]
//   Code du C#
Init(0);
           
IntPtr pointeurManaged = (IntPtr)Get_Adresse(0);[/CODE]
[CODE]
//   Code de la DLL
typedef struct _DLL_TEST_STRUCT
{
    unsigned char    Attribut_Bool1;
    unsigned char    Attribut_Bool2;
    short            Attribut_Short1;
    int                Attribut_Int1;
    double            Attribut_Double1;
}    DLL_TEST_STRUCT;

int* Get_Adresse(int notused)
{
    return (int*) Test_Struct;
}

void Init(int notusded)
{
    Test_Struct = calloc(1, sizeof(DLL_TEST_STRUCT));

    Test_Struct->Attribut_Bool1 = 1;
    Test_Struct->Attribut_Bool2 = 1;
    Test_Struct->Attribut_Short1 = 1;
    Test_Struct->Attribut_Int1 = 1;
    Test_Struct->Attribut_Double1 = 1;
}
[/CODE]

je caste ensuite ce "[U][I]pointeurManaged[/I][/U]" de 2 façons différentes :


Méthode 1 :
[CODE]
DLL_TEST_STRUCT* pointeurManagedStructure = (DLL_TEST_STRUCT*)pointeurManaged;
[/CODE]

ET

Méthode 2 :
[CODE]
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public unsafe struct CS_TEST_STRUCT
{
    public bool Attribut_Bool1;
    public bool Attribut_Bool2;
    public short Attribut_Short1;
    public Int32 Attribut_Int1;
    public double Attribut_Double1;
}

object objectManaged = *(CS_TEST_STRUCT*)pointeurManaged;
[/CODE]

Si je modifie la structure via le pointeur de la méthode 1, je modifie bien en mémoire la structure :
[CODE]
pointeurManagedStructure->Attribut_Bool1 = false;
pointeurManagedStructure->Attribut_Bool2 = false;
pointeurManagedStructure->Attribut_Short1 = 10;
pointeurManagedStructure->Attribut_Int1 = 1000;
pointeurManagedStructure->Attribut_Double1 = 10000;
[/CODE]

Par contre, j'ai beau modifié mon objet "[U][I]objectManaged [/I][/U]", je ne modifie pas en mémoire la structure non managée.

[CODE]
Type _type = objectManaged.GetType();
FieldInfo[] fields = _type.GetFields();
for (int j = 0; j < fields.Length; j++)
{
   if (fields[j].FieldType.ToString() == "System.Int32")
   {
      fields[j].SetValue(objectManaged, 0);
   }
}
[/CODE]

Pourquoi ? Est ce possible ?

Merci de votre aide.

Pascal


Cette discussion est classée dans : code, test, dll, attribut, struct


Répondre à ce message

Sujets en rapport avec ce message

Prb avec DLL [ par pirate75000 ] C'est la premiere fois que je travail en C#Merci de votre aideJe dois appeller une fonction d'une Dll en c++ c'est ecrit de la maniere suivante:La str DLL et Services Web [ par rafraf ] Salut à tous ! J'ai un petit pb avec les DLL en code non managé, en mode Service Web, J'essaye de faire appel à une DLL dans un service web, j DLL Pointeur sur struct [ par kikoff ] ben voila j'ai un gros soucis je dois recuperede la dll une fonction qui renvoit un pointeur sur structureseulement voila comment faire pour recupere QuartzTypeLib.dll et MP3 [ par lsweb ] Bonjour,Quelqu'un aurait-il un code source simple (pour un débutant !) d'un projet illustrant l'utilisation de la QuartzType .dll pour implémenter la format SQL [ par Florynth ] Bonjour à tous,je veux créé un dll .net qui a besoin d'accès à une base de donnés mais qui est portable... Ce que je veux dire c'est si j'installe mon struct et .dat [ par ricklekebekoi ] Hello,En c, je peut faire ceci:#include #include File *ptrf;struct personne{char Nom[21],int Age,long T Debug DLL [ par RegVB ] Bonjour,J'ai une solution C# dans lequel j'ai un projet principal console et un projet DLL utilisé par mon projet console. Existe-t-il un moyen lorsqu Réflection et héritage [ par bigflo93 ] Salut a tous :) Je fais de la reflection. Donc je cherche entre autre à récuperer les variables et leurs valeurs...Mais ue pb se pose quand j'ai une Retour d une DLL [ par ZaRMaS ] Salut a tous, J ai un petit probleme avec ma dll code en C. Elle retourne un char * et je cherche a recuperer en csharp le retour de cette fonction. V Test sur Fichier [ par piep14 ] Bonjour je dois faire un test sur l'existence d'un fichier. Je fais comme ceci : Code: if (File.Exists("config.xml")) { }


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales