Installer un objet COM ! [COM] - Delphi/Pascal - Programmation
Marsh Posté le 11-12-2002 à 12:49:09
j'ai trouvé ça pour toé:
http://www.puremeta.com/ole/OLEPaper.html
Marsh Posté le 11-12-2002 à 13:05:38
/heu c est cool mais ca ne reponds pas vraiement a ma question...
ou meme mes questions !
@->--
Marsh Posté le 11-12-2002 à 13:16:42
d'abord faut que la DLL soit connue du système avant qu'elle puisse être connue par ton application. Un utilitaire nommé regsvr32.exe livré avec Windows te permettra de le faire. Il suffit simplement de spécifier le path de ta DLL en paramètre (tu peux même associer ce programme au type DLL). Oui ça fonctionne en ligne de commande. Un /U en plus permettra de retirer la signature de la DLL du système.
Une fois la signature (le CLSID en fait) inscrite dans la registry, ta DLL doit être disponible dans la liste des objets COM utilisables (je connais pas l'interface Delphi, je précise).
Marsh Posté le 11-12-2002 à 13:17:21
hum...en passant par "projet/importer une bibliothèque de type" ?
tu auras l'interface de ta dll je crois.
et aussi enregistrer ta dll avec un "regserver" en ligne de commande.
Edit: ah ok, grillaid.
Marsh Posté le 11-12-2002 à 13:33:54
Vous etes super les gars !
par hasard est il possible de telecharger une aide sur regsvr32.exe au cas ou je fasse une boullette ?
@->--
Marsh Posté le 11-12-2002 à 13:36:47
KrzAramis a écrit : Vous etes super les gars ! |
ben il a son aide intégrée, suffit de le lui demander avec /? en paramètre
Marsh Posté le 11-12-2002 à 13:52:57
Quand Delphi me l installe y a 100 erreurs dont 1 fatale !
je fais quoi ??
@->--
Marsh Posté le 11-12-2002 à 14:41:37
quand il tente l'import de l'objet COM dans son projet sans doute, mais là désolé, ça sort de mon champs de compétence
Marsh Posté le 11-12-2002 à 14:51:18
Ok les gars.
J ai enregistre la DLL via regserver32. Jusque l atout va bien. Ensuite vous m avez conseille de l ajoute a Delphi via Porject|Import Type Library
Je cherche le chemin de ma DLL je selectionne OK. C est genial les functions dont j avais besoin depuis des lustres s affiche. Or a ce point pour fermer la fenetre de dialog delphi propose:
Install ou bien Create Unit.
Dans les deux cas y a plus de 100 erreurs et 1 fatales . L objet fait 10000 lignes et le compilateur m indique qu il abandonne car trop d erreurs.
Help Help
@->--
Marsh Posté le 11-12-2002 à 16:03:36
essaie d'importer un objet COM standard avant pour voir, on sait jamais
Marsh Posté le 11-12-2002 à 16:15:31
drasche a écrit : essaie d'importer un objet COM standard avant pour voir, on sait jamais |
Et ou je peux trouver ca ?
@->--
Marsh Posté le 15-12-2002 à 15:10:38
T'as pas précisé si c'était un contrôle ou juste des fonctions sans interface... Sinon faut utiliser Component/Import ActiveX Component.
Si ca marche toujours pas, benh donne nous au moins l'erreur ou essaie d'installer les service packs de Delphi 6, y a eu des modifications dans cet outil d'import.
Marsh Posté le 16-12-2002 à 13:59:32
La dll en question doit permettre de piloter un peripherique branche sur mon port COM.
J ai telecharge les upgrade de Delphi 6.
Maitenant ca compile et tout et tout. Cependant en run time quand j utilise une des fonctions incluse dans l objuet et bien delphi me balance un "Erreur Classe Non declare"
@->--
Marsh Posté le 29-01-2003 à 17:34:39
krzAramis a écrit : Maitenant ca compile et tout et tout. Cependant en run time quand j utilise une des fonctions incluse dans l objuet et bien delphi me balance un "Erreur Classe Non declare" |
Une idee qqn ?
Marsh Posté le 29-01-2003 à 18:40:58
tu choppes regmon & filemon (google) puis tu regardes ce que ton code essaye de charger, et ou ça plante (il y aura sûrement une tentative d'accès à une clé inconnue, marquée 'failed' dans regmon). peut-être que l'objet que tu utilises a besoin d'un autre objet non présent sur ton système.
ou sinon c'est un problème de 'binding'. faudrait que tu montres ton code (instanciation de l'objet).
Marsh Posté le 30-01-2003 à 14:59:15
youdontcare a écrit : |
euh, Par exemple dans mon panel 1Wire apparu apres l installation de OWAPI.dll je depose l objet appelle TDSPortAdapter (plus detailles) et je fais:
Code :
|
du coup erreur: Classe non enregristre
et dans owapi_tlb.pas
Citation : |
Voila. Peut tu m endire plus sur les deux soft que tu m as recommender !
@->--
Marsh Posté le 30-01-2003 à 15:07:00
krzAramis a écrit : Voila. Peut tu m endire plus sur les deux soft que tu m as recommender ! |
tu les choppes, tu les lances, et tu regardes ce qu'il se passe lorsque ton applic n'arrive pas à charger l'objet. pas la peine de tergiverser dans le code si deux minutes de regmon vont te montrer qu'il te manque un autre objet.
quant à la 'petite flèche verte', je ne connais pas delphi, je pensais que ça allait être similaire à vc++ ... apparemment non tu devrais voir si tu peux créer l'objet avec CoCreateInstance(), puis énumérer ses méthodes (passer par IDispatch).
Marsh Posté le 30-01-2003 à 16:26:17
J ai lance les deux soft et c est la merde a lire et a dechiffre cependant j ai pu note que:
il ne trouve jamais les fichiers: Owapi.rsm, owapi.dcp, owapi.tds
Il essaye aussi d acceder au repertoires suivants et qui n existent pas:
D:\Program Files\Boralnd\Import
F:\Delphi Practice\Import (delphi practice est le dossier au j ai foutu mes prog)
Recherche dans F:\Delphi Practice\OWAPI\IbProtol\ et ne trouve jamais:
ibProtocol.rsm
.dcp
.tds
.dsk
SYS.dll , CLBCATQ.dll , COMRESS.dll
Delphi32.exe est tjrs a la recherche de rasman.dll
Finalement recherche sans success des *.pbk dans
C:\Docu & settings\All Users\data\Micorsoft\Network\commum\pbk\ et dans C:\Windows\System32\RAs
Pire j ai note que Delphi cherche n importe ou les fichiers .pas et etc. C est fou !
Alors qu est ce que je fais docteur ?
@->--
PS: la ptite fleche vert indique en generale d ou vient l erreur !
Marsh Posté le 30-01-2003 à 16:52:12
krzAramis a écrit : Alors qu est ce que je fais docteur ? |
tout d'abord pour regmon et filemon tu peux mettre des filtres pour ne garder que les messages de ton applic.
ensuite, tu vois bien qu'il manque des trucs. donc s'il y a une machine au boulot ou la dll marche, tu regardes les fichiers qu'elle a et que tu n'as pas ...
d'après google les rsm dcp tds sont des trucs delphi, donc peut-être pas très importants.
les dlls ça devrait déjà plus poser problème.
et regmon, il dit quoi ? il essaye d'accéder des clés qui n'existent pas ?
Marsh Posté le 30-01-2003 à 17:10:18
youdontcare a écrit : tout d'abord pour regmon et filemon tu peux mettre des filtres pour ne garder que les messages de ton applic. |
Ca j avais remarque Merci. Je suis bete mais qd meme pas a ce point la ! enfin pas encore !
youdontcare a écrit : |
heu.. mon boulot c est... Etudiant donc je suis le seul a utiliser cette "objet". D ailleurs je crois que je suis le seul etudiant a developper un pack de software... bref
youdontcare a écrit : |
Cool
youdontcare a écrit : |
humm j ai pas verifie si elles existaient dans C:\Windows\System32\ si c est le cas je vois pourquoi ca serai un probleme. Si elles sont pas la je les mettrai dans le repertoire de l application par contre si elles sont nul part je suis TT.
youdontcare a écrit : |
desole j ai pas encore regarde.. je reviens
@->--
Marsh Posté le 30-01-2003 à 17:28:09
Il y a une CLSID non trouvee ! qd elle est de la form:
HKCR\CLSID\{<Long serie hexadecimal>}\Quelque chose
Les truck marchent pas : au dessus +
InprocHandler32
InprocHandlerX86
LocalServer32
AppID
TreatAs
Ca marche selement pour:
InprocHandler32
Ensuite j ai une deuxieme chaine hexadecimale qui n est pas trouve 2 fois.
Pour finir l executable de mon appli fait des truck du genre:
HKCU\Software\Borland\Locales\F:\Delphi Practice\OWAPI\protocol\iBProtocol.exe
voila.
Que dois je chercher ?
@->--
Marsh Posté le 30-01-2003 à 17:57:59
krzAramis a écrit : Ca j avais remarque Merci. Je suis bete mais qd meme pas a ce point la ! enfin pas encore ! |
je précise car j'ai mis des mois avant de m'en rendre compte
krzAramis a écrit : heu.. mon boulot c est... Etudiant donc je suis le seul a utiliser cette "objet". D ailleurs je crois que je suis le seul etudiant a developper un pack de software... bref |
j'ai mal interpreté ta "demande à un gars de la boîte" ... l'idéal aurait été de lui demander ce qu'il a sur sa machine qui fait que ça marche chez lui.
krzAramis a écrit : humm j ai pas verifie si elles existaient dans C:\Windows\System32\ si c est le cas je vois pourquoi ca serai un probleme. Si elles sont pas la je les mettrai dans le repertoire de l application par contre si elles sont nul part je suis TT. |
system32 est dans le path, windows cherche les dll là-dedans après avoir cherché dans le répertoire de l'applic.
krzAramis a écrit : Il y a une CLSID non trouvee ! |
bah voilà, y'a du progrès essaye une recherche google sur le clsid, demander au type de la boîte, etc.
krzAramis a écrit : Pour finir l executable de mon appli fait des truck du genre: |
ça doit être spécifique à delphi, rien de particulier.
bref, checke les dlls, cherche le clsid manquant sur google.
au fait, pourquoi tu demandes pas au "type de la boîte" ? ce serait pas plus simple ?
//
dernier recours : tu peux créer une instance de ton objet avec CoCreateInstance(). par-dessus, tu peux invoquer des méthodes si tu connais leur nom (GetIDsOfNames(), Invoke()). c'est assez chiant mais si ça marche, ça veut dire qu'il y a une couille dans l'interface delphi (à laquelle je ne connais rien du tout). ça vaut le coup de tester.
http://msdn.microsoft.com/library/ [...] 3_76p4.asp
Marsh Posté le 30-01-2003 à 18:10:15
youdontcare a écrit : dernier recours : tu peux créer une instance de ton objet avec CoCreateInstance(). par-dessus, tu peux invoquer des méthodes si tu connais leur nom (GetIDsOfNames(), Invoke()). c'est assez chiant mais si ça marche, ça veut dire qu'il y a une couille dans l'interface delphi (à laquelle je ne connais rien du tout). ça vaut le coup de tester. |
tu as lu ces posts car j ai bien essayer un truck dans ce gout la. Cependant pour faire la technique de la coClasse il faut pouvoir declarer une variable du style I<qqChose> et je ne peux pas.
Quand au gars de la boite comme tu dis j ai deja fait une demarche dans ce sens mais le gars m a gentillement (apres 2 semaines d attente) envoye balader en ecrivant que
1 Owapi.dll etait un objet COM (chose que j ai appris entre temps)
2 Aucune application Delphi utilisant cette technologie avait ete cree. Ajoutant au passage qu il n en voyait pas l interet car pour lui c est fait avec Java donc ca devrai etre utilise en java !
Bref pour ta technique chiant tu as une url pour je voye ca en detail ?
@->--
PS: et zut ca m a pris trop de temps d ecrire ce message je sais memem plus ce que j ecris
Marsh Posté le 30-01-2003 à 18:32:33
krzAramis a écrit : tu as lu ces posts |
non. mais écoute le type qui te dit de faire CreateOleObject().
krzAramis a écrit : il faut pouvoir declarer une variable du style I<qqChose> et je ne peux pas. |
non. je ne vois pas d'où tu sors ça ... regarde le code de la msdn, c'est traduisible très facilement en pascal.
pour revenir sur le machin.application, tu as dans un objet com un clsid (la masse de chiffres que tu as vu dans regmon) et un identifiant texte. si tu peux voir les objets de la dll dans delphi, tu peux voir ces identifiants et créer les objets correspondants. tu peux aussi chopper com explorer ( http://www.4developers.com/com/ ) pour voir leurs noms.
krzAramis a écrit : 2 Aucune application Delphi utilisant cette technologie avait ete cree. Ajoutant au passage qu il n en voyait pas l interet car pour lui c est fait avec Java donc ca devrai etre utilise en java ! |
je ne vois pas l'intérêt de faire du java si c'est pour bosser exclusivement sous windows ... je ne sais pas comment ce genre de trucs marche, il y a peut-être besoin de dlls supplémentaires.
krzAramis a écrit : Bref pour ta technique chiant tu as une url pour je voye ca en detail ? |
le lien de la msdn que je t'ai donné !
il y a un endroit où la télécharger ta dll ?
Marsh Posté le 03-02-2003 à 10:24:40
Ouff trop fatiguant le week end. Bon on va mettre les choses au clair.
Page ou telecharger la DLL:
ftp://ftp.dalsemi.com/pub/auto_id [...] pen_source
Section TMEX and 1-Wire COM Runtime Environment (RTE) Drivers premier lien.
Section Software Developer's Kit (SDK) premier lien
Section 1-Wire API for Java premier lien
Apres telechargement :
[Disque dur au choix]1 Wire SDK V4.00\Source\Owcom*.*
Faire attention la dll est compressee dans le fichier zip !
Voila. Sinon j ai regarder le code de la MSDN c est a vomir ! je vais essayer mais j ai des doutes sur mes capacites de traductions. A tout de suite !
@->--
Marsh Posté le 03-02-2003 à 19:41:54
j'ai téléchargé la dll, je l'ai enregistrée, testée en javascript sous ie :
<script>
try
{
var o = new ActiveXObject("owapi.CRC16" );
alert(o.compute(124));
}
catch (e)
{
alert('exception';
}
</script>
j'obtiens 57601, un résultat cohérent, aucune exception.
apparement une couille avec delphi, donc.
passer par le code de la msdn te donnera le même résultat qu'ie.
peut-être peux-tu t'en tirer en codant en javascript et en embeddant internet explorer dans ton applic (enfin j'en doute, j'ai toujours eu des problèmes avec les tableaux).
donc il te reste plus qu'à décortiquer le code de la msdn.
Marsh Posté le 11-12-2002 à 11:56:04
Bonjour,
J ai un fichier DLL copie sur mon PC. Apres moulte et moulte recherches il m ai impossible d utiliser cette DLL de facon classique !
Quelle joie intense un gars de la boite qui a cree cette DLL m a dit (j avais deja compris entre temps ) que c etait en objet COM.
Ma question comment que je fais pour installer cette DLL en temps que objet COM sur mon PC ? et sur Delphi 6.0 Entreprise ?
Ensuite comment que je fais pour utiliser cet Objet apres installation ?
Est ce que mon aplli sera dependante de cette DLL ?
merci !
PS: j aimerai bien en finir dans la journee avec cette histoire !
---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site