Tester un ObjPtr ou un RtlMoveMemory
Bonjour,
Dans un développement Excel VBA, j'enregistre l'adresse mémoire d'un objet avec ObjPtr, pour retrouver plus tard une référence à l'objet avec RtlMoveMemory. Le problème est que dans certains cas, l'adresse enregistrée n'est plus valable au moment où j'essaie de l'utiliser. Du coup, la création d'objet fonctionne (ou en tout cas elle ne provoque pas d'erreur), mais quand j'invoque une méthode de cet objet, ça plante Excel.
Je cherche donc un moyen de tester que le numéro de pointeur est toujours valable, ou que l'objet renvoyé est correct, du bon type, etc., pour abandonner la création d'objet et éviter le plantage.
Je ne m'y connais pas trop en programmation système, donc toute piste sera la bienvenue !
Les infos détaillées : je suis en Excel 2010 sur du Windows 7 SP1 64 bit. J'utilise le CustomUI, et l'objet que je référence est le ruban personnalisé (classe IRibbonUI).
Voici les lignes pertinentes de mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| ' déclarations
Private iRuban As IRibbonUI
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes&)
' enregistrement de l'adresse mémoire de l'objet ribbon dans un name du fichier Excel
Sub ruban_chg(ribbon As IRibbonUI) ' événement qui se produit au chargement du ruban
Set iRuban = ribbon
ThisWorkbook.Names(NOMRUBAN_REVLIST).RefersTo = ObjPtr(ribbon)
End Sub
' récupération de l'objet ruban
Function Ruban() As IRibbonUI
Dim ribbonPointer As Long
If iRuban Is Nothing Then
ribbonPointer = Mid(ThisWorkbook.Names(NOMRUBAN_REVLIST).Value, 2) ' le premier caractère est un = généré par Excel
If ribbonPointer <> 0 Then Call CopyMemory(iRuban, ribbonPointer, 4)
Set Ruban = iRuban
End Function
' ça plante ensuite quand je fais par exemple ça :
Ruban.Invalidate |
En vous remerciant,