Erreur à l'installation d'un composant "maison" (Builder 10)

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - Modifié par Polack77 le 8/09/2016 à 09:33
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 9 sept. 2016 à 14:15
Bonjour,
Je rencontre une erreur à l'installation d'un composant que j'ai crée et je n’arrive pas à m'en sortir. :

Impossible de charger le package 'Nom' Il contient l'unité 'Stconst', qui est aussi contenue dans le package 'SysToolsCR230'

Mon code (complet en plus) :
.hpp :
//---------------------------------------------------------------------------
#ifndef QrSpCodeBar_VWH
#define QrSpCodeBar_VWH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <QRCtrls.hpp>
#include <QuickRpt.hpp>
#include <StBarC.hpp>

//---------------------------------------------------------------------------

class PACKAGE TQRSpCodeBar : public TQRImage
{
private:
 TStBarCode* m_StBarCode;
protected:
 void __fastcall Paint();
 void __fastcall Print(int OfsX,int OfsY);
public:
 //Contructeurs / destructeur
 __fastcall TQRSpCodeBar(TComponent* Owner);
 __fastcall ~TQRSpCodeBar();
 //Propertys
 __property TStBarCode* StBarCode = {read=m_StBarCode, write=m_StBarCode};

__published:
};
//---------------------------------------------------------------------------
#endif


.cpp
//---------------------------------------------------------------------------


#pragma hdrstop

#include "QrSpCodeBar_VW.h"
#pragma link "QRCtrls"
#pragma link "QuickRpt"
#pragma link "StBarC"

#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck est utilisée pour garantir que les composants créés n'ont pas
// de fonctions virtuelles pures.
//

static inline void ValidCtrCheck(TQRSpCodeBar *)
{
 new TQRSpCodeBar(NULL);
}
//---------------------------------------------------------------------------
__fastcall TQRSpCodeBar::TQRSpCodeBar(TComponent* Owner)
 : TQRImage(Owner)
{
 m_StBarCode = new TStBarCode(this);
}
__fastcall TQRSpCodeBar::~TQRSpCodeBar()
{
 delete m_StBarCode;
}
//---------------------------------------------------------------------------

void __fastcall TQRSpCodeBar::Paint()
{
 //Ajout de l'image surle QR
 m_StBarCode->PaintToCanvas(this->Canvas, this->ClientRect);
 //Appel de paint de qrimage::paint();
 TQRImage::Paint();
}

void __fastcall TQRSpCodeBar::Print(int OfsX,int OfsY)
{
 //Ajout de l'image surle QR
 m_StBarCode->PaintToCanvas(this->Canvas, this->ClientRect);
 //Appel de paint de qrimage::paint();
 double CodeLeft, CodeTop, CodeHeight;
 int PixelsPerInchX, PixelsPerInchY;

 PixelsPerInchX = GetDeviceCaps(this->ParentReport->QRPrinter->Canvas->Handle, LOGPIXELSX);
 PixelsPerInchY = GetDeviceCaps(this->ParentReport->QRPrinter->Canvas->Handle, LOGPIXELSY);

 CodeLeft  = this->ParentReport->QRPrinter->XPos(OfsX + this->Size->Left) * (1 / (long double)PixelsPerInchX);
 CodeTop  = this->ParentReport->QRPrinter->YPos(OfsY + this->Size->Top)  * (1 / (long double)PixelsPerInchY);
 CodeHeight  = this->ParentReport->QRPrinter->YPos(OfsY + this->Size->Top + this->Size->Height) * (1 / (long double)PixelsPerInchY) - CodeTop;

 m_StBarCode->PaintToCanvasSize(this->ParentReport->QRPrinter->Canvas, CodeLeft, CodeTop, CodeHeight);
}


namespace Qrspcodebar_vw
{
 void __fastcall PACKAGE Register()
 {
  TComponentClass classes[1] = {__classid(TQRSpCodeBar)};
  RegisterComponents("TEST", classes, 0);
 }
}
//---------------------------------------------------------------------------


Si il semble que si je désactive les packages :
TurboPack SysTools CBuilder Designtime package
TurboPack SysTools CBuilder DB Designtime package

L'installation se passe bien, mais à l'utilisation (dans un projet qui demande un StBarCode donc où je ne peut pas désactiver les package en question) le message revient...

J'ai déjà passé BEAUCOUP d'heures sur ce problème et je n'avance pas d'un pouce, qi qq'un avait une solution ça serais mon sauveur ^^

Amicalement
Polack77

PS :
Juste histoire d'être transparent j'ai posé cette question sur un autre forum mais je n'ai pas reçu de réponse pour le moment (je posterais bien sur la réponse des deux cotés si/quand tout sera résolu ;)). Et ce composant n'est pas vraiment de moi à la base je n'ai fait que reprendre l'équivalent écrit par un autre en Pascal

2 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
8 sept. 2016 à 11:11
Heeeeeeee 8O J'ai "résolu" mon problème...

Tout du moins j'ai trouvé comme faire fonctionner le truc sur mon PC (aucune idée de la réalité des choses)

J'avais (et mon problème de base était sans doute là) inclue un dossier dans les fichiers à inclure de mon projet pour que le compilo trouve le fichier StBarC.Obj

J'ai supprimer ce dossier d'inclusion (erreur de compil StBarC.obj introuvable)

J'ai :
- mis en commentaire tout mon code de mon composant
- ajouter un nouveau composant à mon projet qui hérite cette fois de StBarC.
- compilation (génération d'un fichier StBarC.Obj dans le dossier de compilation, cool)
- Passage en commentaire de l'ensemble du code contenu dans ce nouveau composant
- réactivation du code de mon 1er composant
- compilation / installation
- plus de problème

Si qu'un à une solution moins bidouille je suis preneur ;)
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
9 sept. 2016 à 14:15
Bon nouveau test aujourd'hui, et je conserve cette nouvelle solution pour le moment (un collègue cherche autre pistes) :

Je crée un composant qui hérite du StCodeBar et ne fait rien de plus (en gros je crée un composant avec l'interface et basta).
J'inclue le fichier .h de ce nouveau composant dans mon composant qui hérite du Q.R. et j'utilise cette nouvelle classe et non StBarCode directement (pour l'exposer & l'utiliser).

Et pouf, plus de problème, tout ce passe bien.

Bon encore une fois j'ai trouvé une solution à un problème de link sans rien y comprendre... C'est triste quand même...

Si quelqu'un connais un bon cours/tuto sur le link ça me serait utile je pense xD
0
Rejoignez-nous