2009-12-30 6 views
1

Exemple:Pourquoi les chaînes égales se comportent-elles parfois différemment? (VB.NET Interface COM)

Dim Sh32 As Object = CreateObject("Shell.Application") 
Dim path As String = "C:\temp\catalog.zip" 
Dim sf As Object = Sh32.NameSpace(path) 

-> ne fonctionne pas, sf = Nothing

Dim Sh32 As Object = CreateObject("Shell.Application") 
Dim path As String = "C:\temp\catalog.zip" 
Dim sf As Object = Sh32.NameSpace(path.ToString) 

-> fonctionne

Toute idée?

Nettement path = path.ToString, mais ils se comportent différemment lorsqu'ils sont utilisés en tant que paramètres COM.

+0

Pourquoi utilisez-vous COM pour cela? La classe Process devrait être capable de faire tout ce que Shell.Application peut faire. –

+0

Merci, mais j'utilise sf.MoveHere (newpath.ToString) pour ajouter un fichier à un fichier zip, et il n'y a pas de fonctionnalité équivalente dans la classe Process. La classe ZipPackage du .NET framwork est une alternative mais elle ajoute toujours un fichier meta [ContentType] .xml. – GerdR

Répondre

-1

Hmm, je ne connais pas les détails de VB et/ou COM assez bien, mais peut-être il y a une différence entre une chaîne objet et une représentation chaîne ?

Devrait être intéressant de voir quelqu'un "dans le savoir" résoudre le puzzle;)

+0

L'implémentation de ToString() par le type de chaîne est "return this", cela ne devrait donc avoir aucun effet. (Et non, il n'y a pas de différence entre un objet chaîne et sa représentation - ce sont les deux chaînes.) – Eilon

+0

J'ai effectué une série de tests supplémentaires et découvert qu'il suffit même de doubler les parenthèses dans l'instruction pour le faire fonctionner: Dim sf As Object = Sh32.NameSpace ((chemin)). Ma conclusion jusqu'à présent est qu'il s'agit d'un problème du compilateur VB.NET IL – GerdR