CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] persistance de variable dans DLL

dnob700
dnob700
Niveau 10
01 juin 2004 à 19:21:25

Salut,

Encore un problème de DLL : lorsqu´un programme appelle une DLL, comme ce n´est pas un objet, il n´en crée pas d´instance.

Est ce qu´il y a un moyen de rendre des variable persistante entre diférends appels de différentes fonctions de la DLL pour un même programme ( pas entre différend programme appelant).

Merci.

Altonfrere
Altonfrere
Niveau 10
01 juin 2004 à 20:25:27

oui c´est possible, tu as un exemple concret de ce que tu voudrais ? car ya plusieurs moyen de faire ca . ..

dnob700
dnob700
Niveau 10
01 juin 2004 à 20:59:04

En fait, le truc c´est qu´on ne peut pas réellement exporté des classe ou alors j´ai pas compris comment. Donc, pour pouvoir utiliser quelque chose qui ressemble à une classe, il faudrait que l´on ai à appeler seulment les fonctions dans leur transmettre de paramètres, le DLL se " souvenant" de ceux-ci depuis le dernier appel.

Altonfrere
Altonfrere
Niveau 10
01 juin 2004 à 21:41:39

Bon je suis pas sur d´avoir compris . .. mais voilà quelquechose qui j´espère pourra t´aider un peu.

Tout d´abord exporter une classe est tout à fait possible. Si tu veux exemple, tu fais nouveau projet dans VC++, tu choisis DLL > puis dans la dialog qui apparait > " DLL that exports some symbols" ( ou qqchose comme ca). Le seul hic c´est que le programme client doit être linké avec le fichier . lib généré en compilant la DLL.

Autre solution tu construis un système de session au niveau de ta DLL : Init + Release.

Lors de l´init tu obtiens ( au niveau du programme client de la DLL) un ID qui te permet de t´idenfitier lors des appels suivants. Et lors du Release tu libères cet ID. Exemple :

côté DLL :
en fonction de l´ID tu peux allouer une série de variables / classes qui seront accessibles si le programme client fournit le bon ID ( l´ID peut correspondre par exemple à une adresse du côté de la DLL vers une classe contenant les données d´une session etc...)

. . Init(typeID _*pID)
{
. ..
/ / allouer un nouvel ID
_*pID = NouvelID;
}

. . Release(typeID _ID)
{
/ / libérer la session identifiée par _ID
}

. . Fonction1(typeID _ID . ..)
{
/ / Traitement 1 lié au contexte _ID
}

. . Fonction2(typeID _ID . ..)
{
/ / Traitement 2 lié au contexte _ID
}

côté client :

typeID monID;

Init(&);
Fonction1(monID, . ..);
Fonction2(monID, . ..);
Release(monID);

dnob700
dnob700
Niveau 10
02 juin 2004 à 00:13:00

pour l´ID j´y avais un peu pensé, mais c´est complexe.
Pour le link avec le . lib, c´est plus vraiment une DLL à ce moment là !

enfin merci, c´est quand même la réponse que j´attendais qu´on ne peut pas vraiment le faire ( sauf a tricher).

Altonfrere
Altonfrere
Niveau 10
02 juin 2004 à 19:35:52

" pour l´ID j´y avais un peu pensé, mais c´est complexe"

Pourquoi complexe ? c´est pourtant très utilisé, et moi même c´est comme ca que je fais.
Tu es de toute facon obligé de savoir QUI appelle la DLL sans quoi tu risques d´avoir des problèmes sur un fonctionnement multi-thread. La solution naïve serait d´utiliser des variables globales au sein de la DLL mais justement le problème de conflits entre plusieurs instances risque d´arriver.

dnob700
dnob700
Niveau 10
02 juin 2004 à 23:36:59

oui, bien sûr, c´est comme ca que je le ferais, vu qu´il n´y a pas d´autre solutions.

C´est pour une fois moins satisfaisant que la méthode qu´utilise le VB.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment