Problème de debuggeravec un dll [Résolu]

Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 5 janv. 2005 à 11:56 - Dernière réponse : cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

14 réponses

Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 14 janv. 2005 à 16:56
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Banban113
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 17 janv. 2005 à 10:18
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Banban113
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 5 janv. 2005 à 13:21
0
Utile
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.
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 5 janv. 2005 à 13:29
0
Utile
Tiens si toute fois tu veux un exemple de dll en delphi
http://www.delphifr.com/code.aspx?ID=11758


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Commenter la réponse de jmp77
cs_MHI 112 Messages postés jeudi 7 octobre 2004Date d'inscription 19 février 2009 Dernière intervention - 5 janv. 2005 à 13:49
0
Utile
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]
Commenter la réponse de cs_MHI
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 5 janv. 2005 à 13:53
0
Utile
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
Commenter la réponse de Banban113
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 5 janv. 2005 à 14:03
0
Utile
MHI,

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

Banbang
Commenter la réponse de Banban113
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 5 janv. 2005 à 16:12
0
Utile
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.
Commenter la réponse de jmp77
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 6 janv. 2005 à 10:20
0
Utile
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
Commenter la réponse de Banban113
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 6 janv. 2005 à 10:40
0
Utile
Et je voudrais le code en delphi stp.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Commenter la réponse de jmp77
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 6 janv. 2005 à 13:46
0
Utile
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
Commenter la réponse de Banban113
Banban113 10 Messages postés jeudi 10 juin 2004Date d'inscription 7 février 2005 Dernière intervention - 13 janv. 2005 à 10:00
0
Utile
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
Commenter la réponse de Banban113
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 14 janv. 2005 à 16:59
0
Utile
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.
Commenter la réponse de jmp77
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 31 août 2005 à 12:15
0
Utile
Moi aussi je suis nouveau en Delphi.

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

Les points d'arrèts fonctionnent.
Commenter la réponse de cs_rt15

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.