Bibliothèque de Classes et DLL

Résolu
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 5 mars 2011 à 16:24
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 5 mars 2011 à 18:46
Bonjour à tous,

Toujours dans mes débuts sous .NET, j'ai une question en 2 points:

Sous VB6 j'avais créé une DLL regroupant un certain nombre de fonctions/commandes SQL. Les fonctions étaient regroupées dans des modules de classe dont la propriété Instancing était à GlobalMultiUse ce qui me permettait de les appeler directement par leur nom dans mes autres applis VB6 pour peu que j'ai une référence à cette DLL.

1ère question: Est-il possible de réutiliser cette DLL telle que dans mon appli .NET ?

2ème question: Si je réécris from scratch cette DLL, je créé sous .NET une nouvelle bibliothèque de classe mais je n'ai trouvé nulle part la propriété Instancing ou son équivalent. Ceci pour ne pas déclarer une classe dans mes applis et ensuite appeler mes fonctions ?

Pour essayer de résumer:
Sous VB6 je fais:

MyRecordset = SQL_RecordsetQuery()
avec MyRecordset dans une appli X et la fonction dans une DLL Y externe.
J'ai des quantités d'applis qui tournent très bien sur ce modèle.

Sous .NET, suis-je obligé de faire
Dim oSQL as MyClassedeFonctionsSQL (résidant dans une DLL externe)
MyRecordset = oSQL.SQL_RecordsetQuery()

En espérant avoir été assez clair.

Calade

6 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 mars 2011 à 17:22
Bonjour,

1) Oui, en utilisant Interop, regardes dans l'onglet "COM" lors de l'ajout de références.

2) Dans ce cas, on parle de membres partagés (pour le fonctions), Shared en VB.
Ou alors un module public peut aussi faire l'affaire.

Ensuite, appeller :
MyRecordset = EsapceDeNomDeLaDll.MyClassedeFonctionsSQL.SQL_RecordsetQuery()

Mais fais attention, ADO.NET n'est peut être (je n'ai pas essayé) compatible (Je parles des classes) avec ADO.

3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 mars 2011 à 18:06
Bonjour,

Recherches ta classe dans l'explorateur d'objet.

les espaces de noms sont une base de la prog objet.
System.IO est un espace de nom par exemple.

3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 mars 2011 à 17:38
Salut NHenry,

et merci de ta réponse.

1) OK, je l'ai rajouté, mais j'obtiens toujours la même erreur:
"SQL_Connect n'est pas déclaré. Il est peut-être inaccessible en raison de son niveau de protection", y a t'il quelque chose que j'ai loupé ?

Ci-dessous l'appel:
P_cnnDBLauncher = SQL_Connect(strBaseName)
P_cnnDBLauncher est déclaré Public en String pour contenir ma chaîne de connexion (précision, je suis resté en ADO 2.8, chaque chose en son temps !).

2
MyRecordset = EsapceDeNomDeLaDll.MyClassedeFonctionsSQL.SQL_RecordsetQuery()
Quel espace de nom ? A moins que tu ne parles de ADO.NET ?
Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 mars 2011 à 18:16
OK, je pense avoir pigé le principe pour réutiliser mes DLL, par contre si maintenant il reconnait bien ma fonction, j'ai une autre erreur:
Erreur 1 Une référence à un membre non partagé requiert une référence d'objet.

Si je comprends bien, ma fonction étant Public et non Shared (et pour cause), il faut que je déclare ma classe avant ?




Calade
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 mars 2011 à 18:43
Bonjour,

Il faut que tu instancies (créer un objet) ta classe avant de pouvoir l'utiliser.
Avec le classique New.

0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 mars 2011 à 18:46
Bonjour,

Oui, c'est bien ce que je craignais.
Donc ça aussi ça change par rapport à VB6 puisque je n'avais pas besoin d'instancier quoi que ce soit, la référence suffisait.

En tout cas merci pour tout.


Calade
0
Rejoignez-nous