Import de dll

LaPatte81 Messages postés 4 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 28 mars 2008 à 17:25
Ayine Messages postés 4 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 1 décembre 2008 - 1 déc. 2008 à 09:15
Bonjour,

Voila mon problème.
J'ai dévellopé une appli en F#, et je dévellope l'interface en C#.
Mon problème est le suivant, j'importe ma dll F# sans problèmes, et j'ai acces a mes fonctions et aux types que j'ai créés aussi.
Par contre impossible d'acceder aux variables ( publiques bien sur), elles sont reconnues et je n'ai pas de probleme pour compiler mon appli C#.
Par contre a l'exécution je tompe sur l'exception "System.TypeInitializationException".

Est-ce que quelqu'un a une idée pour résoudre ou contourner ce problème.

Merci.

LaPatte81.

6 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 mars 2008 à 14:15
Salut,

Heu là comme ça c'est vague.
Tu pourrais reproduire le problème dans un projet dont tu pourrais nous donner les sources ?

/*
coq
MVP Visual C#
CoqBlog
*/
0
LaPatte81 Messages postés 4 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 31 mars 2008
29 mars 2008 à 16:14
Bonjour,

Effectivement je viens de em relire sans mon code sous le nez, je comprends que ca puisse etre un peu obscur.
Jen'as pas les sources sous la main mais en gros je pourrai résumer le probleme de cette facon  :

Dans le F#

exemple.fs :

type couple_a =  (string , int )
let valeur_test = ("test",0)

exemple.fsi (signature) :

type couple_a = (string * int)
val valeur_test : couple_a

Je compile tout ca dans une dll  que j'ajoute en référence dans mon projet C#.
Et dans mon code C# je peux créer des nouveaux couple_a sans probleme, et je peux acceder a b. Mais a l'execution losrque j'accede a b je tombe sur mon erreur d'initialisation :

(exemple.couple_a) b = new (exemple.couple_a)();  -> ca ca marche
b = exemple.valeur_test;  -> ca compile mais ca plante systematiquement a l'execution.

J'epere avoir été plus clair. Si ce n'est pas le cas, je posterai une partie de mon code lundi.

En tout cas merci de se pencher sur le probleme.

++
LaPatte81.
0
ecosmose Messages postés 46 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 30 septembre 2010
30 mars 2008 à 16:31
Salut,

le type couple_a possède un couplet d'attributs

Peut etre te faut il redéfinir l'opérateur d'affectation = car le programme ne fait quelles sont les opérations à effectuer lors de l'affectation..

As tu essayé ca :

couple_a =  (string , int )
let couple_a valeur_test = ("test",0) //déclaration que la variable valeur_test est de type couple_a

ou encore

(exemple.couple_a) b = new (exemple.couple_a)();  -> ca ca marche
b[0] = exemple.valeur_test[0]; 
b[1] = exemple.valeur_test[1]; 
ou alors
b.string = exemple.valeur_test.string; 

b.int = exemple.valeur_test.int; 

Enfin je ne connais F# donc ceci n'est peut etre pas une bonne remarque...

Bonne recherche
BINOME de ECOSMOSE
Association ecologique d'actions de culture et d'Informations
0
LaPatte81 Messages postés 4 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 31 mars 2008
31 mars 2008 à 10:27
Bonjour,

Oui,oui j'ai essayé ca. Mes types sont beaucoup plus compliqués que ce que j'ai mis en exemple, et je ne m'en sortirai pas si toutes les variables n'étaient pas typées ;).

C'est un peu plus compliqué puisque dans l'object browser, je retrouve tous les objects que j'ai mis dans ma dll. Et ils sont typés correctement.

Si j'importe ma dll dans un autre programme F#, tout marche comme prévu. C'est vraiment dans le passage au C# que ce trouve mon problème.

Par exemple dans cette fonction :

private
void comboBox1_SelectedIndexChanged(
object sender,
EventArgs e){

ComboBox cbo = sender
as
ComboBox;

if (cbo ==
null)

   return;

ItemComboForm2 item = (
ItemComboForm2)cbo.SelectedItem;

Node.
Hash_tbl_node table_tmp = (
Node.node_tlb);

double tmp =
Fr_common.Get_float (((
Node.
Node_bhv) (table_tmp.Get_value(item.Libelle))).valeur1) ;

string s =
"";

this.label6.Text = (
string)
TypeDescriptor.GetConverter(s).ConvertFrom(tmp);
}

Tout ca compile bien. Ma table de hachage possède les bons attributs soit {get}.
Mais je tombe sur ce problème d'initilisation.
Peut etre faut il que j'utilise ce get, mais je ne sais pas comment faire. J'ai essayer de l'incorporer à mon code F# mais ca ne change rien.

Dans tous les cas merci de tenter de m'aider.

++
LaP@tte.
0

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

Posez votre question
LaPatte81 Messages postés 4 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 31 mars 2008
31 mars 2008 à 16:41
Bon j'ai peut etre une piste :

Les valeurs qui ne passent pas sont de type abstrait, est-ce que ca pourrait etre la source du problème ??

++
0
Ayine Messages postés 4 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 1 décembre 2008
1 déc. 2008 à 09:15
comment importer une DLL ecrite en C# dans une application C#
0
Rejoignez-nous