SOUSCLASSER LES FENETRES D'1 AUTRE APP

Signaler
Messages postés
340
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
25 août 2007
-
cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19476-sousclasser-les-fenetres-d-1-autre-app

cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
It crash because of the VBVM.
Ca pete a cause de la VBVM.
RAFAAJ2000
Messages postés
16
Date d'inscription
samedi 27 mars 2010
Statut
Membre
Dernière intervention
30 décembre 2012

Sorry for the confusion EB.

The Increment Function example I posted above ( with the added MsgBox ) is in the dll .

and the actual DLL function call that crashes VBA is as follows :

Public Declare Function Increment Lib _
"C:\Documents and Settings\Jaafar\Bureau\MyDLL\mathlib.dll" ( _
value As Integer) As Integer

Private Sub cmdIncrement_Click()
Range("a10") = Increment(1)
End Sub
RAFAAJ2000
Messages postés
16
Date d'inscription
samedi 27 mars 2010
Statut
Membre
Dernière intervention
30 décembre 2012

Hi EB again.

As a matter of curiosity, did you try the trick for making standard dlls from ActiveX dlls like explained in the above link?

I did follow the steps and managed to make it work but when I add a small change to the exported functions (see below) and run the dll from Excel-VBA the excel application crashes !

1 -Original code ( + a simple MsgBox )that works when ran from a VB Standard VB : No crashing.

Public Declare Function Increment Lib _
"C:\Documents and Settings\Jaafar\Bureau\MyDLL\mathlib.dll" ( _
value As Integer) As Integer

Public Function Increment(var As Integer) As Integer
If Not IsNumeric(var) Then Err.Raise 5
MsgBox var
Increment = var + 1
End Function

2 -Code ran from excel VBA that CRASHES when the MsgBox is added :

Public Function Increment(var As Integer) As Integer
If Not IsNumeric(var) Then Err.Raise 5
MsgBox var
Increment = var + 1
End Function

In fact, except wotking with variables, the exported Functions will always crash if another COM function or even another API function is called but only when the client is VBA not VB !

I would appreciate if you could share your knowledge of this kind of stuff and shade some light on this to see if/how this could be worked around.

Regards.
cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
If you add a DllMain function using this trick you will bypass the VBVM initialization resulting in a very instable state of your dll. But... it could work if you avoid any VBVM call. For example manipulating string in the DllMain will cause a seg fault because VB need to initialize the VM before doing any other things.

Si tu utilises une fonction DllMain avec cette astuce tu vas faire sauter l'initialisation de la VBVM ce qui va rendre ton programme très instable. Cela pourrait tout de même marcher si tu évite tout appel a la VM. Par exemple si tu manipule une chaîne de caractère tu vas avoir droit a un beau seg fault car VB doit initialiser la VM avant de faire quoi que ce soit d'autre.