Probleme "DllUnregisterServer"

Probleme "DllUnregisterServer" - C++ - Programmation

Marsh Posté le 11-09-2003 à 15:11:07    

Bonjour a ts,
voila, j'ai fait 3 ligne de code dans lesquelles j'ai
mis ceci :
une instruction qui utilise la fonction "DllUnregisterServer"
d'un filtre DirectShow, et juste après, une intruction
qui modifie un octet dans ce fichier. Et evidemment
j'ai un message d'erreur a l'ouverture du fichier.
 Si je mets la fonction "DllUnregisterServer" après
l'ouverture du fichier ça fonctionne.
J'ai l'impression qu'une fois que VB utilise le fichier
DirectShow, il garde un pointeur (ou qq chose comme ça) sur
ce fichier, et m'interdit(ou Windows) donc de l'ouvrir
en ecriture.
Pareil, si au lieu d'utiliser la fonction "DllUnregisterServer",
j'utilise un control "Windows Media Player" et que je charge
un fichier audio dans celui-ci, meme après avoir fait :
MediaPlayer1.stop
MediaPlayer1.Filename = ""
MediaPlayer1.Enabled = False
Si j'essaye de modifier ce fichier Directshow qui normalement
n'est plus utilisé, et ben ça marche pas non plus.
Si qqun avait une solution ça s'rait super.

Reply

Marsh Posté le 11-09-2003 à 15:11:07   

Reply

Marsh Posté le 11-09-2003 à 15:17:11    

Le double post c mal.


---------------
Le Tyran
Reply

Marsh Posté le 11-09-2003 à 15:20:16    

Comprend pas trop ce que tuessaye de faire  :heink:


---------------
Le Tyran
Reply

Marsh Posté le 11-09-2003 à 15:23:54    

desolé pour le db post mais comme c'est VB et Api.

Reply

Marsh Posté le 11-09-2003 à 15:53:47    

C'est quoi le but ?
Tu sais ce que tu fais ? (COM tu connais ?)
http://msdn.microsoft.com/library/ [...] l_4u2a.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-09-2003 à 16:10:25    

HelloWorld, j'veux simplement "Unregistered" un filtre
directshow et pouvoir ensuite modifier un octet dans ce fichier.
J'te rassure, c'est pas du piratage, c'est juste une fonction
essentiel qui manque et comme le projet est abandonné, j'me
debrouille comme je peux. Le probleme c'est qu'apparemment,
dés que VB utilise le fichier, soit directement avec
"DllUnregisterServer", soit a travers DirectShow, le fichier
n'est plus accessible qu'en "lecture".

Reply

Marsh Posté le 11-09-2003 à 16:28:55    

Donc tu codes en VB.
Comment tu fais pour appeler DllUnregisterServer ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-09-2003 à 16:42:24    

Declare Function RegComAX Lib "G:\Filter\Filter.ax" Alias "DllRegisterServer" () As Long
Declare Function UnRegComAX Lib "G:\Filter\Filter.ax" Alias "DllUnregisterServer" () As

Reply

Marsh Posté le 11-09-2003 à 16:48:24    

Bon sinon y aurait bien une autre solution.
Ce s'rait de modifier le fichier source et ajouter la fonction
nécessaire (lecture d'un "Long" dans un fichier (qui ne contient qu'un "Long" ) et attribution de la valeur a une variable.
Mais mes competences en C++ rendent cette possibilitée
impossible.

Reply

Marsh Posté le 11-09-2003 à 16:59:57    

Rectification,
utiliser "DllUnregisterServer" ne dérange pas!
ni meme de poser un control "Windows Media Player" sur la
feuille non plus. Mais si je charge un fichier audio
dans le control WMP et que je passe en lecture, meme si je
fais :
MediaPlayer1.Stop
MediaPlayer1.FileName = ""
MediaPlayer1.Enabled = False
,si j'utilise ensuite "DllUnregisterServer" j'ai l'erreur
d'ecriture dans l'fichier.

Reply

Marsh Posté le 11-09-2003 à 16:59:57   

Reply

Marsh Posté le 11-09-2003 à 17:07:18    

Evidemment, j'ai contacté l'auteur du Filtre pour lui parler
de mon probleme et d'essayer de trouver une solution mais
l'E-Mail m'a été retourné car injoignable. Le site de l'auteur
n'a pas non plus été mis a jour depuis 1 an. Et forcément
il n'y a pas d'equivalent ailleurs.

Reply

Marsh Posté le 11-09-2003 à 19:11:43    

Citation :

Declare Function RegComAX Lib "G:\Filter\Filter.ax" Alias "DllRegisterServer" () As Long
Declare Function UnRegComAX Lib "G:\Filter\Filter.ax" Alias "DllUnregisterServer" () As


 
Je ne sais pas trop comment VB gère cela, mais si, comme je le crois, il génère des entrées dans la table des imports de ton exe, ton exe se retrouve lié de manière explicite à la dll. Ce lien est géré par windows, au même titre qu'un exe est lié à kernel32 par exemple.
Donc tant que ton exe est en mémoire, il reste rattaché à la dll et celle-ci n'est pas unloadé, donc Windows t'interdit de modifier le fichier.
Pour savoir si ce que je pense se passer est ce qui se passe, télécharge dependency walker (www.dependencywalker.com) et analyse ton exe VB.
Si tu trouves un référence vers ladite dll, alors je ne me suis pas trompé.
Si tel est le cas, il faut que tu fasses en lien dynamique avec la dll.
Declare LoadLibrary, GetProcAddress et FreeLibrary. Charge la dll, récupère un pointeur sur DllUnregisterServer, appelle la fonction, et libère la dll.
C'est peut être pas évident à faire en VB, alors je pense qu'il est plus simple d'appeler avec ShellEx regsvr32 et de lui dire de désinscrire le filtre :
ShellEx "regsvr32 /u G:\Filter\Filter.ax"
Voilà.
Stp dit moi ce que fait VB quand on déclare une fonction importée d'une dll via Declare, ca répondra à une vieille interrogation.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-09-2003 à 20:19:58    

Merci pour la reponse.
j'ai essayé la methode avec seulement "DllUnregisterServer" puis
celle avec toute ces fonction :
LoadLibraryRegister,
FreeLibraryRegister,
CloseHandle,
GetProcAddressRegister,
CreateThreadForRegister,
WaitForSingleObject,
GetExitCodeThread,
ExitThread
mais ça na rien changé.(aucun retour d'erreurs des fonctions)

Reply

Marsh Posté le 11-09-2003 à 23:14:13    

Juste une petite chose si ça peut vous aider à m'aider....
dans VB, quand j'arrete le programme, je peux meme pas
effacer le filtre directshow! si je sort de VB, je peux.
Je sais plus très bien c'que j'fait mais bon, j'ai
jeter un oeil sur le SDK Microsoft et ai decidé d'essayer :
CoFreeUnusedLibraries et
CoFreeAllLibraries
sans succès.

Reply

Marsh Posté le 12-09-2003 à 00:06:38    

Je pense avoir trouvé, ça viendrait pas de VB mais de
DirectShow. J'ai ré-enregistré le filtre et j'ai verifié dans
GraphEdit si il etait bien là. Ensuite j'ai lancé Windows
Media Player 6.4 et chargé un MP3. Dans les propriétés de
WMP j'ai constaté que le filtre etait utilisé.
J'ai stoppé la lecture et fait "Fermer" (donc le MP3 mais pas
WMP). WMP toujours actif, j'ai essayé d'effacer le Filtre
Directshow et Windows n'a pas voulu. J'en conclu que mon
probleme vient de Directshow.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed