Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
map["key"] = "value";
dll.put( map );
return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
map["key"] = "value";
dll.put( map );
return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
map["key"] = "value";
dll.put( map );
return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
Du coup comment modifier mon exemple pour qu'il fonctionne ?
gbaudin a écrit:Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap
pour chaque exe (debug/release) et que sais-je encore.
Les options de compilations, etc, etc.
Il y a de fortes chances qu'ils soient très différents.
Je les renome MyMapA (dll) et MyMapB (exe) respectivement
pour illustrer le problème.
En compilant la dll, on a :
typedef std::map<std::string, std::string> MyMapA;
class CTestDll
{
protected:
MyMapA mMap;
public:
void put( const MyMapA& _map );
};
et dans l'exe :
#include "stdafx.h"
#include "testDll.h"
/* donc
typedef std::map<std::string, std::string> MyMapB;
class CTestDll
{
protected:
MyMapB mMap;
public:
void put( const MyMapB& _map );
};
*/int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
MyMapB map;map["key"] = "value";
dll.put( map );
Equivalent à:
dll.put(reinterpret_cast<MapA&>(map));
Boum !return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes.
(et surtout qu'en plus ce sont des templates ce qui n'aide pas)
Manuel
gbaudin a écrit:
Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap
pour chaque exe (debug/release) et que sais-je encore.
Les options de compilations, etc, etc.
Il y a de fortes chances qu'ils soient très différents.
Je les renome MyMapA (dll) et MyMapB (exe) respectivement
pour illustrer le problème.
En compilant la dll, on a :
typedef std::map<std::string, std::string> MyMapA;
class CTestDll
{
protected:
MyMapA mMap;
public:
void put( const MyMapA& _map );
};
et dans l'exe :
#include "stdafx.h"
#include "testDll.h"
/* donc
typedef std::map<std::string, std::string> MyMapB;
class CTestDll
{
protected:
MyMapB mMap;
public:
void put( const MyMapB& _map );
};
*/
int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
MyMapB map;
map["key"] = "value";
dll.put( map );
Equivalent à:
dll.put(reinterpret_cast<MapA&>(map));
Boum !
return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes.
(et surtout qu'en plus ce sont des templates ce qui n'aide pas)
Manuel
gbaudin a écrit:Bonjour,
Bonjour,
si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap
pour chaque exe (debug/release) et que sais-je encore.
Les options de compilations, etc, etc.
Il y a de fortes chances qu'ils soient très différents.
Je les renome MyMapA (dll) et MyMapB (exe) respectivement
pour illustrer le problème.
En compilant la dll, on a :
typedef std::map<std::string, std::string> MyMapA;
class CTestDll
{
protected:
MyMapA mMap;
public:
void put( const MyMapA& _map );
};
et dans l'exe :
#include "stdafx.h"
#include "testDll.h"
/* donc
typedef std::map<std::string, std::string> MyMapB;
class CTestDll
{
protected:
MyMapB mMap;
public:
void put( const MyMapB& _map );
};
*/int main(int argc, char* argv[])
{
CTestDll dll;
MyMap map;
MyMapB map;map["key"] = "value";
dll.put( map );
Equivalent à:
dll.put(reinterpret_cast<MapA&>(map));
Boum !return 0;
}
Ce petit test crash dans la methode "put", mais je ne suis pas sur d'en
comprendre les raisons.
Est ce que quelqu'un peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes.
(et surtout qu'en plus ce sont des templates ce qui n'aide pas)
Manuel
gbaudin a écrit:si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap pour
chaque exe (debug/release) et que sais-je encore. Les options
de compilations, etc, etc. Il y a de fortes chances qu'ils
soient très différents.
Ce petit test crash dans la methode "put", mais je ne suis
pas sur d'en comprendre les raisons. Est ce que quelqu'un
peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes. (et
surtout qu'en plus ce sont des templates ce qui n'aide pas)
gbaudin a écrit:
si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.
exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap pour
chaque exe (debug/release) et que sais-je encore. Les options
de compilations, etc, etc. Il y a de fortes chances qu'ils
soient très différents.
Ce petit test crash dans la methode "put", mais je ne suis
pas sur d'en comprendre les raisons. Est ce que quelqu'un
peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes. (et
surtout qu'en plus ce sont des templates ce qui n'aide pas)
gbaudin a écrit:si je crée une simple dll dans laquelle j'exporte des objets
Aïe! c'est mal parti.exemple :
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
typedef std::map<std::string, std::string> MyMap;
Je vois déjà un problème ici. Ce typedef, en réalité,
peut représenter PLUSIEURS types.
Un MyMap pour chaque dll (debug/release) plus un MyMap pour
chaque exe (debug/release) et que sais-je encore. Les options
de compilations, etc, etc. Il y a de fortes chances qu'ils
soient très différents.
Ce petit test crash dans la methode "put", mais je ne suis
pas sur d'en comprendre les raisons. Est ce que quelqu'un
peut m'eclairer ?
J'espère que mon explication est suffisament claire.
Du coup comment modifier mon exemple pour qu'il fonctionne ?
Pas simplement en tous cas.. là, je dois partir maintenant.
Mais juste un conseil: utiliser des POD, pas des classes. (et
surtout qu'en plus ce sont des templates ce qui n'aide pas)
Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
"kanze" a écrit dans le message de news:
gbaudin wrote:Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
[...]J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
Ils sont considérés de même type. Le problème, c'est c'est là
ton problème, c'est que si tu compiles avec de différentes
options, ils n'ont pas forcément la même implémentation --
c-à-d, en quelque sort, qu'ils ont en fait des types différents,
même si le compilateur les considère de même type.
Mais ce n'est qu'un des problèmes possibles.
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
"kanze" <kanze@gabi-soft.fr> a écrit dans le message de news:
1153295220.343651.177830@75g2000cwc.googlegroups.com...
gbaudin wrote:
Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
[...]
J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
Ils sont considérés de même type. Le problème, c'est c'est là
ton problème, c'est que si tu compiles avec de différentes
options, ils n'ont pas forcément la même implémentation --
c-à-d, en quelque sort, qu'ils ont en fait des types différents,
même si le compilateur les considère de même type.
Mais ce n'est qu'un des problèmes possibles.
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
"kanze" a écrit dans le message de news:
gbaudin wrote:Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
[...]J'ai quand même du mal a comprendre pourquoi
map<string,string> n'est pas considéré de même type dans l'exe
et dans la dll ...
Ils sont considérés de même type. Le problème, c'est c'est là
ton problème, c'est que si tu compiles avec de différentes
options, ils n'ont pas forcément la même implémentation --
c-à-d, en quelque sort, qu'ils ont en fait des types différents,
même si le compilateur les considère de même type.
Mais ce n'est qu'un des problèmes possibles.
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
gbaudin wrote:Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
Euh... c'est un peu tranché à la hache come opinion non? D'un point
gbaudin wrote:
Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
Euh... c'est un peu tranché à la hache come opinion non? D'un point
gbaudin wrote:Je n'aurais pas penser que le type template pouvait provoquer
cette erreur ...
Si tu as compilé avec les mêmes options, il ne peut pas.
Effectivement j'ai fais un essai rapide en remplacant par une
liste chainé et la ca fonctionne.
Question : où est-ce que tu fais de l'allocation de la
mémoire ?
Un piège assez connu pour les débuttants avec les DLL Windows,
c'est que si on ne prend pas des précautions particulières,
chaque DLL a son propre gestionnaire de la mémoire. Allouer dans
une, et libérer dans l'autre fait boom. Dans ton cas, ça peut
être un problème avec les std::string, créé dans le main, et
libérer dans CTestDll::put. (Mais il peut y avoir d'autres
problèmes aussi.)
Je sais que c'est possible de contourner ce problème, de forcer
tout le monde à utiliser la même instance de la gestionnaire. Ne
travaillant pas sous Windows d'habitude, je ne sais pas la
solution exacte, mais je suis sûr que quelqu'un soit ici, soit
dans un groupe Windows (de préférence... sauf que j'aimerais
aussi voir la solution, et je ne fréquente pas les groupes
Windows:-), pourrait t'aider.
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
Euh... c'est un peu tranché à la hache come opinion non? D'un point
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
En général, le chargement dynamique est une source de problèmes
et d'instabilités. On l'évite quand on n'en as pas explicitement
besoin -- dans un programme applicatif qui ne supporte pas de
plugins, il n'y a que des bibliothèques du système et des
produits tièrce (base de données, etc.) qui doivent être chargé
dynamique. Mettre diverses parties de l'application dans de
différentes DLL's n'a que de désavantages.
Je n'aurais pas penser que le type template pouvait provoquer cette erreur
J'ai quand même du mal a comprendre pourquoi map<string,string> n'est pas
considéré de même type dans l'exe et dans la dll ...
Je n'aurais pas penser que le type template pouvait provoquer cette erreur
J'ai quand même du mal a comprendre pourquoi map<string,string> n'est pas
considéré de même type dans l'exe et dans la dll ...
Je n'aurais pas penser que le type template pouvait provoquer cette erreur
J'ai quand même du mal a comprendre pourquoi map<string,string> n'est pas
considéré de même type dans l'exe et dans la dll ...
Effecitvement : Contrairement à ce que dit Manuel, il est parfaitement
possible d'importer/exporter des objets de la STL à travers des
frontières de DLLs, il suffit de prendre quelques précautions....
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
les différentes implémentations s'accordent avec cete définition).
Bon d'accord, je rêve un peu tout haut là....
Effecitvement : Contrairement à ce que dit Manuel, il est parfaitement
possible d'importer/exporter des objets de la STL à travers des
frontières de DLLs, il suffit de prendre quelques précautions....
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
les différentes implémentations s'accordent avec cete définition).
Bon d'accord, je rêve un peu tout haut là....
Effecitvement : Contrairement à ce que dit Manuel, il est parfaitement
possible d'importer/exporter des objets de la STL à travers des
frontières de DLLs, il suffit de prendre quelques précautions....
Sinon, il faut éviter de passer des objets qui utilisent de la
mémoire dynamique à travers l'interface (ce qui n'est pas
toujours évident).
Vivement que la norme sous spécifie enfin la notion de module! (et que
les différentes implémentations s'accordent avec cete définition).
Bon d'accord, je rêve un peu tout haut là....
Autre cas d'utilisation de DLL : .NET... Il n'y a pas de linker avec ce
framework, et tout passe donc par des bibliothèques dynamiques :(
Autre cas d'utilisation de DLL : .NET... Il n'y a pas de linker avec ce
framework, et tout passe donc par des bibliothèques dynamiques :(
Autre cas d'utilisation de DLL : .NET... Il n'y a pas de linker avec ce
framework, et tout passe donc par des bibliothèques dynamiques :(