Problème de debuggeravec un dll

Résolu
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005 - 5 janv. 2005 à 11:56
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 31 août 2005 à 12:15
Salut tout le monde !

Je suis un petit nouveau sur ce site !!!!

Bon voila, je bosse sur un logiciel et je dois faire une dll appelé par celui-ci.

J'arrive pas à configurer Delphi 7 pour que le debugger marche.

J'ai potasser toute la doc ecrite et en ligne te je comprends pas !!!!!

Quelqu'un peut-il m'aider, j'en ai marre de mettre des boites de messages pour debugger mes applis !!!!!

Au fait, si je fais les mêmes developpements avec VB 6.0, le debugger marche.
Malheureusement ce coup-ci on m'impose Delphi 7

Banbang

13 réponses

Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
14 janv. 2005 à 16:56
C'est bon ça marche fallait cocher deux cases dans les optins du projet puis faire construire le projet puis et seulement apres faire une compilation.

Merci

Banbang
3
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
17 janv. 2005 à 10:18
Il Fallait dans Projet/Options Onglet "Lieur" cocher les cases "Informations de debogage TD32" et "Symboles de debogage distant".

Ensuite il faut faire : Projet/Construire Projet (Cela va changer les options dans le fichier dpr du projet)
Puis ensuite compiler le projet.

Enfin envoyer les options de lecture pour debogger.

Attention si c'est l'inverse qui est fait : cad compiler puis construire, les options ne seront pas prises en compte et se remettront comme avant, cad les deux cases decochées.

Voila Bon courage à tous!!!!

Banbang
3
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 13:21
Hello,



Alors je ne sais pas si j'ai tout compris : Tu dois faire la dll + l'appli qui l'appelle ?

Si c'est le cas quand tu veux debugger ta dll tu dois ouvrir le fichier
dpr de celle ci puis tu dois definir l'application hote. Pour cela tu
vas dans le menu Executer puis Parametres et dans application hote tu pointes sur ton exe.

Ainsi tu peux lancer un debugage sur ta dll.



J'espere avoir pu t'aiguiller.


Ah oui moi je suis en delphi 6 et si je definis une application hote
qui ne se trouve pas dans le repertoire de la dll et bien ca ne marche
pas. A chaque fois je dois copier l'exe de mon programme pres du .dpr
de la dll pour que le debugage fonctionne. Pourquoi si quelqu'un le
sait ?


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
cs_MHI Messages postés 110 Date d'inscription jeudi 7 octobre 2004 Statut Membre Dernière intervention 19 février 2009 1
5 janv. 2005 à 13:49
La méthode de jmp77 fonctionne très bien (je l'utilise quotidiennement).
Mais je crois qu'il y a aussi moyen avec [Executer] - [Attacher le processus]
0

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

Posez votre question
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
5 janv. 2005 à 13:53
Salut

Pour preciser un peu.

Je bosse sur un logiciel qui exite deja et qui n'est pas simplement un exe.

On peut, pour completer les fonctions de ce soft en appelant des dll par des scripts simples.

En fait quand je configure le debogger, Delphi me lance bien mon soft mais une fois les fonctions de la dll appelées, il passe sur mes points d'arret sans les voir.

Un de mes collegues m'a dit qu'il a deja vu marcher ce debug sur une dll avec le soft sur lequel on travail.

Pour te repondre JMP77, la dll pointait deja sur l'exe. J'ai essayé de mettre tout dans le meme repertoire (dll + source + exe) et ça ne marche pas non plus. Je regarde la source de ton lien pour voir.

Merci

Banbang
0
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
5 janv. 2005 à 14:03
MHI,

Marche pas non plus avec ta methode, je commence à deprimer là !!!!!

Banbang
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 16:12
Tu fais un chargement dynamique ou statique de la dll?

Alors pourrais tu nous donner les ligne de code concernant l'appel de ta dll?



J'ai une idée mais je voudrais etre sur.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
6 janv. 2005 à 10:20
Voila le Script qui lance ma dll

=============================================================
Function AddFiles (ApplHndl As Long,Sstr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long) As Integer

Dim MonComp As Object
Dim FirstRec As Object


'Appel d'une dll du logiciel pour convertir la session et une recliste en comrecordlist
Set SmSession = SCREXT_ObjectForInterface(ApplHndl)
CONV_RecListToComRecordList FirstPar,FirstRec



' Récupère le composant Main de la Dll
Set MonComp=CreateObject("DLLProject.Main")
If MonComp Is Nothing Then
msgbox "Erreur lors de la connexion à l'interface"
RunConfigurateur=Err_Gen
Exit Function
End If

' On lance la fonction de la DLL
MonComp.AddFiles FirstRec


' Fermeture du composant
Set Main=Nothing



AddFiles = ERR_NONE
End Function
==================================================================

j'espere sue ça pourra t'aider !!!!

Banbang
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
6 janv. 2005 à 10:40
Et je voudrais le code en delphi stp.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
6 janv. 2005 à 13:46
Voila le main appelé par le script

============================================================
unit Main;


{$WARN SYMBOL_PLATFORM OFF}


interface


uses
ComObj, ActiveX, IntertecProject_TLB, StdVcl,Smarteam_TLB, SmApplic_TLB, SmRecList_TLB,Dialogs;


Var
ParentsProject, ParentsObject : IsmObjects;


type
TIntertec = class(TAutoObject, IIntertec)
protected
procedure SetDeptType(const Session: ISmSession;
const FirstRec: ISmRecordList); safecall;


end;


implementation


uses ComServ,USetTypeDept;


procedure TIntertec.SetDeptType(const Session: ISmSession;
const FirstRec: ISmRecordList);


Var


FirstRecord : IsmRecord;


begin


// On Convertit la SmRecordList en SmRecord
FirstRecord := FirstRec.GetRecord(0);


// On Lance La Procedure
SetTypeDept (Session,FirstRecord);



end;


initialization
TAutoObjectFactory.Create(ComServer, TIntertec, Class_Intertec,
ciSingleInstance, tmBoth);
end.
===================================================

une unité appelée par le main

=====================================================
unit USetTypeDept;


interface


Uses
ComObj, ActiveX, IntertecProject_TLB, StdVcl,Dialogs, SmApplic_TLB, SmRecList_TLB,Smarteam_TLB, SysUtils, Main;


Procedure SetTypeDept(Session : IsmSession; Rec : Ismrecord);


implementation



Procedure SetTypeDept(Session : IsmSession; Rec : IsmRecord);


Var


Parent,Child: IsmObject ;
ParentObjID, ParentClassID, ChildObjID, ChildClassID, LookUpObjId: integer;


Begin


// On declare les variables
ParentObjId := Rec.Value['OBJECT_ID1'];
ParentClassID := Rec.Value['PAR_CLASS_ID'];
ChildObjId := Rec.Value['OBJECT_ID2'];
ChildClassID := Rec.Value['SON_CLASS_ID'];


// On recupere parent et enfant du lien
Parent := Session.ObjectStore.RetrieveObject(ParentClassID,ParentObjID);
Child := Session.ObjectStore.RetrieveObject(ChildClassID,ChildObjID);


// On initialise le nom de parent en fonction du parent
LookUpObjId := Parent.Value['CN_DEPT'];



// On fait les modif dans l'objet qui a été créer
Child.Value['CN_DEPT'] := LookUpObjId;
Child.Update;





end;



end.

======================================================

le projet

=======================================================

library IntertecProject;


uses
ComServ,
IntertecProject_TLB in 'IntertecProject_TLB.pas',
Main in 'Main.pas' {Intertec: CoClass},
USetTypeDept in 'USetTypeDept.pas';


exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;


{$R *.TLB}


{$R *.RES}


begin
end.

==================================================

et enfin le projet_TLB

==================================================

unit IntertecProject_TLB;


// ************************************************************************ //
// AVERTISSEMENT
// -------
// Les types déclarés dans ce fichier ont été générés à partir de données lues
// depuis la bibliothèque de types. Si cette dernière (via une autre bibliothèque de types
// s'y référant) est explicitement ou indirectement ré-importée, ou la commande "Rafraîchir"
// de l'éditeur de bibliothèque de types est activée lors de la modification de la bibliothèque
// de types, le contenu de ce fichier sera régénéré et toutes les modifications
// manuellement apportées seront perdues.
// ************************************************************************ //


// PASTLWTR : 1.2
// Fichier généré le 22/11/2004 14:52:53 depuis la bibliothèque de types ci-dessous.


// ************************************************************************ //
// Bibl. types : D:\_Intertechnique\Dll\IntertecProject.tlb (1)
// LIBID: {9555E731-7ECA-44EE-9296-73EB2F4E77C8}
// LCID: 0
// Fichier d'aide :
// Chaîne d'aide : IntertecProject (bibliothèque)
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\System32\stdole2.tlb)
// (2) v1.0 SmApplic, (C:\Program Files\SMARTEAM\Bin\SmApplic.tlb)
// (3) v1.0 SmRecList, (C:\Program Files\SMARTEAM\Bin\SmRecList.tlb)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // L'unité doit être compilée sans pointeur à type contrôlé.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface


uses Windows, ActiveX, Classes, Graphics, SmApplic_TLB, SmRecList_TLB, StdVCL, Variants;




// *********************************************************************//
// GUIDS déclarés dans la bibliothèque de types. Préfixes utilisés :
// Bibliothèques de types : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces : IID_xxxx
// *********************************************************************//
const
// Versions majeure et mineure de la bibliothèque de types
IntertecProjectMajorVersion = 1;
IntertecProjectMinorVersion = 0;


LIBID_IntertecProject: TGUID = '{9555E731-7ECA-44EE-9296-73EB2F4E77C8}';


IID_IIntertec: TGUID = '{180106A9-7B4C-4CB4-B929-C4B3E3E26AFA}';
CLASS_Intertec: TGUID = '{97DF2EB8-4338-4806-B70B-7629F4CCBB3E}';
type


// *********************************************************************//
// Déclaration Forward des types définis dans la bibliothèque de types
// *********************************************************************//
IIntertec = interface;
IIntertecDisp = dispinterface;


// *********************************************************************//
// Déclaration de CoClasses définies dans la bibliothèque de types
// (REMARQUE: On affecte chaque CoClasse à son Interface par défaut)
// *********************************************************************//
Intertec = IIntertec;



// *********************************************************************//
// Interface : IIntertec
// Indicateurs : (4416) Dual OleAutomation Dispatchable
// GUID : {180106A9-7B4C-4CB4-B929-C4B3E3E26AFA}
// *********************************************************************//
IIntertec = interface(IDispatch)
['{180106A9-7B4C-4CB4-B929-C4B3E3E26AFA}']
procedure SetDeptType(const Session: ISmSession; const FirstRec: ISmRecordList); safecall;
end;


// *********************************************************************//
// DispIntf : IIntertecDisp
// Flags : (4416) Dual OleAutomation Dispatchable
// GUID : {180106A9-7B4C-4CB4-B929-C4B3E3E26AFA}
// *********************************************************************//
IIntertecDisp = dispinterface
['{180106A9-7B4C-4CB4-B929-C4B3E3E26AFA}']
procedure SetDeptType(const Session: ISmSession; const FirstRec: ISmRecordList); dispid 201;
end;


// *********************************************************************//
// La classe CoIntertec fournit une méthode Create et CreateRemote pour
// créer des instances de l'interface par défaut IIntertec exposée
// par la CoClasse Intertec. Les fonctions sont destinées à être utilisées par
// les clients désirant automatiser les objets CoClasse exposés par
// le serveur de cette bibliothèque de types.
// *********************************************************************//
CoIntertec = class
class function Create: IIntertec;
class function CreateRemote(const MachineName: string): IIntertec;
end;


implementation


uses ComObj;


class function CoIntertec.Create: IIntertec;
begin
Result := CreateComObject(CLASS_Intertec) as IIntertec;
end;


class function CoIntertec.CreateRemote(const MachineName: string): IIntertec;
begin
Result := CreateRemoteComObject(MachineName, CLASS_Intertec) as IIntertec;
end;


end.

==========================================================

voila tout ce quil y a dans une de mes DLL

+ un bibliotheque de type pour gerer les entrées et sortie

Banbang
0
Banban113 Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 7 février 2005
13 janv. 2005 à 10:00
Bon y'a du nouveau j'ai reussi à faire marcher ce debugger mais je sais pas comment !!!!

Je n'arrive plus à le faire sur d'autres dll

Banbang
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
14 janv. 2005 à 16:59
Et ben ca aura été la lutte mon pauvre. Vraiment la misère ton affaire.
Je suis heureux que tu es trouvé car je voyais franchement pas d'ou ca
venait.

Pourrais tu juste preciser les deux cases à cocher que tu as activé ca
pourra servir à d'autre un jour quand ils retomberont sur ce message

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
31 août 2005 à 12:15
Moi aussi je suis nouveau en Delphi.

Pour débuguer mes dlls, je fais des groupes de projets.

Les points d'arrèts fonctionnent.
0
Rejoignez-nous