Gambas France BETA


Pas de compte ? Incription

[GB3] Component.Load avec chemin absolu.

Ce sujet est résolu.

1
AuteurMessages
Flachy Joe#1 Posté le 21/1/2012 à 19:11:11
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
Je souhaite charger un composant à l'exécution, ce composant est programmé en GB3 et se trouve dans un dossier du répertoire de l'application. J'utilise donc
1
Component.Load(Application.Path &/ "modules/module1.gambas")

Ça fonctionne très bien avec l'IDE, mais lorsque je lance l'exécutable, j'obtiens
#27: Cannot load component 'module1.gambas': cannot find library

Est-ce que quelqu'un à une idée de l'origine du problème ?

Merci !
;) Flachy Joe ;)
Prokopy#2 Posté le 23/1/2012 à 03:09:30
Kinder PinguiSalut Flachy,

Ne serait-ce pas tout simplement :

1
Component.Load("modules/module1.gambas")


... étant donné que le composant se trouve dans le répertoire du projet ?
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
gambix#3 Posté le 24/1/2012 à 20:56:40
Faire simple !oui sauf que la tu cherche a charger un script :/


De plus ton truc semble être dans ton projet. En gambas une classe n'est chargée qu'a sa première utilisation.

component.load n'est utilisable que pour des composant binaire gb.xx pas des classes (un module est une classe static)

Moins de texte dans une signature c'est agrandir son espace.
Flachy Joe#4 Posté le 30/1/2012 à 19:14:41
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,

@gambix :
ce n'est pas un script, c'est bien l'exécutable binaire qui se nomme module.gambas
J'ai bien 2 projets distinct, un composant contenant des classes que je veux utiliser dans un second projet.
Une fois ce souci résolu, je posterai un exemple d'application modulaire (des 'plugins' en gros), c'est plutôt bourrin et ça devrait s'utiliser de façon sympa...

@Prokopy :
Alors là ça ne marche même plus dans l'IDE, il faut le chemin absolu.

En tout cas merci pour l'intérêt que vous portez à mon problème.
;) Flachy Joe ;)
gambix#5 Posté le 30/1/2012 à 22:11:28
Faire simple !le problème c'est que ça se trouve dans le repertoire du projet
Moins de texte dans une signature c'est agrandir son espace.
GarulfoUnix#6 Posté le 30/1/2012 à 22:25:58
By the wayPas de chemin relatif en Gambas. Toujours en absolu.
spheris#7 Posté le 30/1/2012 à 22:28:37
Flachy Joe#8 Posté le 31/1/2012 à 18:41:32
Iguane : Il Gambas Uniquement pour Activer ses NEuronesGambix, tu peux développer s'il te plaît ? Quel est le souci avec le répertoire du projet ?
Merci.
;) Flachy Joe ;)
Flachy Joe#9 Posté le 9/2/2012 à 14:40:53
Iguane : Il Gambas Uniquement pour Activer ses NEuronesUp ? :|
;) Flachy Joe ;)
jeanyvon#10 Posté le 9/2/2012 à 16:05:26
Gambas? Ma! Et gustobonjour,
As tu essayé :
1
componement.load(user.home & "/moncomposant.gambas")


bien sur, en mettant le composant dans ton home. ça le sort du rep projet mais ce n'est peut être plus componement.load mais peut être un shell!
A+
JY
Vieillir? On peut retarder mais pas y échapper!
Flachy Joe#11 Posté le 9/2/2012 à 16:58:10
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
c'est pas mieux en déplaçant le composant, j'ai l'impression qu'on est sensé mettre tous les composants au même endroit (/usr/local/lib/gambas3 renvoyé par Component.Path) ce qui n'est pas franchement pratique dans mon cas puisque je ne veux pas que mes "plugins" apparaissent dans l'IDE !

Quand à l'utilisation d'un shell, ça permettrait d'exécuter le code du composant (en envisageant qu'il a une Sub Main) mais pas d'interagir avec ses classes, on perd donc tout l'intérêt de la chose.

Ce qui m'énerve plus que tout c'est que ça marche parfaitement avec l'IDE, on peut mettre le composant n'importe où, du moment qu'on fourni le chemin absolu c'est ok.
;) Flachy Joe ;)
Flachy Joe#12 Posté le 9/2/2012 à 17:24:29
Iguane : Il Gambas Uniquement pour Activer ses NEuronesYyyyyyyyyyyyyyyyyypiiiiiiiiiiiiiiiiiiiiiiiii !!!!

"Eureka, et pourtant elle tourne !" comme disait Pythagore en voyant le couvercle de son pendule se soulever.

Je comprend pourquoi Gambix disait
le problème c'est que ça se trouve dans le répertoire du projet

C'est qu'il faut mettre les composants DANS le répertoire du projet, pas dans un SOUS répertoire.

J'ai trouvé en explorant les sources : dans trunk/main/gbx/gbx_archive.c
void ARCHIVE_load(ARCHIVE *arch, bool dep)
{
char *path;

if (arch->path)
{
if (EXEC_debug)
path = (char *)arch->path;
else
{
path = exist_library(PROJECT_path, arch->name); // ICI !
if (!path) path = exist_library("/usr/bin", arch->name);
if (!path) path = exist_library("/bin", arch->name);
}

if (!path || !FILE_exist(path))
THROW(E_LIBRARY, arch->name, "cannot find library");
}
else
{
path = FILE_buffer();
sprintf(path, ARCH_PATTERN, COMPONENT_path, arch->name);
}

load_archive(arch, path, dep);
}


On peut voir que le chemin fourni n'est utilisé qu'en cas de débugage. D'où le fait que ça fonctionne dans l'IDE mais pas avec l'exécutable.
Je vais proposer la modification de ce comportement...

En tout cas merci à tout le monde !
;) Flachy Joe ;)
Flachy Joe#13 Posté le 9/2/2012 à 19:56:03
Iguane : Il Gambas Uniquement pour Activer ses NEuronesEt voila, comme promis, maintenant que ce souci est résolu j'ai déposé un petit exemple sur les applications modulaires.
C'est par là : http://gambasforge.org/code-55-application-modulaire--des-plugins-pour-votre-appli.html
;) Flachy Joe ;)
1