Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire une icône d'une DLL

2 réponses
Avatar
Mousnynao
Bonjour,

Je tente d'implémenter le code qui suit :

Public Function ExtraireIcone(ByVal iconName As String) As Icon

Dim Assembly_Execution As Assembly = _
Me.GetType().Assembly.GetEntryAssembly()

Dim namespaceName As String = _
Assembly_Execution.GetName().Name.ToString()

iconName = namespaceName & "." & iconName

Dim streamIcon As Stream = _
Assembly_Execution.GetManifestResourceStream(iconName)

Dim iconEmbedded As Icon = New Icon(streamIcon)

Return iconEmbedded

End Function

J'ai un warning sur la ligne :

Dim Assembly_Execution As Assembly = _
Me.GetType().Assembly.GetEntryAssembly()

et plus précisément sur la partie :

Me.GetType().Assembly.GetEntryAssembly()

Je reçois le message :
[ Accès d'un membre partagé, d'un membre constante, d'un membre enum
ou d'un type imbriqué via une instance; l'expression qualifiante ne sera pas
évalué.]

J'ai trouvé ce code sur la toile mais aucune indication sur ce "warning".

Michel

2 réponses

Avatar
Jérémy Jeanson
Bonjour Mousnynao,

En lieu et place de :
Me.GetType().Assembly.GetEntryAssembly()
il faut écrire :
Assembly.GetAssembly(Me.GetType())

Car Assembly.GetEntryAssembly() est une méthode statique et comme te le
souligne Visual Studio, le framework interdit d'appeler un méthode
statique à partir d'une instance d'un objet.

Pour mieux comprendre, tu as peut être déjà constaté que si tu écris une
méthode statique dans une classe, tu ne peux pas appeler cette méthode
au seins de sa classe en la préfixant par Me.

Par exemple on ne peut pas écrire :
Public Class Class1

Public Shared Sub MaMethodeStatique()
'
End Sub

Public Sub MaMethodeDInstance()
Me.MaMethodeStatique()
End Sub

End Class

Mais on peut ecrire :
Public Class Class1

Public Shared Sub MaMethodeStatique()
'
End Sub

Public Sub MaMethodeDInstance()
MaMethodeStatique()
End Sub

End Class

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Mousnynao
Bonjour Jérémy,

Merci beaucoup pour ta réponse.

Très clair, très précis. Je débute avec les Assemblys et je suis un peu
perdu, alors ton aide est très apprécié.

Effectivement, j'avais déjà rencontré ce message (warning), mais j'ai
encore de la difficulté à l'interprèté lorque que je rencontre du nouveau
code.

Merci encore.

Michel

"Jérémy Jeanson" a écrit :

Bonjour Mousnynao,

En lieu et place de :
Me.GetType().Assembly.GetEntryAssembly()
il faut écrire :
Assembly.GetAssembly(Me.GetType())

Car Assembly.GetEntryAssembly() est une méthode statique et comme te le
souligne Visual Studio, le framework interdit d'appeler un méthode
statique à partir d'une instance d'un objet.

Pour mieux comprendre, tu as peut être déjà constaté que si tu écris une
méthode statique dans une classe, tu ne peux pas appeler cette méthode
au seins de sa classe en la préfixant par Me.

Par exemple on ne peut pas écrire :
Public Class Class1

Public Shared Sub MaMethodeStatique()
'
End Sub

Public Sub MaMethodeDInstance()
Me.MaMethodeStatique()
End Sub

End Class

Mais on peut ecrire :
Public Class Class1

Public Shared Sub MaMethodeStatique()
'
End Sub

Public Sub MaMethodeDInstance()
MaMethodeStatique()
End Sub

End Class

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr