2010-09-20 4 views
0

J'ai une bibliothèque X, qui a une classe C qui utilise le composant Y. Cependant, Y n'est pas disponible en 64 bits, donc il a été remplacé par le composant Z, mais je veux toujours utiliser Y si disponible.Puis-je utiliser une bibliothèque qui fait référence à un assemblage indisponible, s'il n'est pas utilisé?

Je voudrais faire référence à Y et Z et ensuite

C.vb:

#If 32bit then 
Class C 
// implementation of C using Y 
End Class 
#End If 

C64.vb

#If 64bit then 
Public Class C 
// implementation of C using Z 
End Class 
#End If 

Note: Commentaires style C en raison mettre en évidence les erreurs avec les commentaires vb. Le problème, comme je le vois, est que je vais avoir une référence à Y dans la version 64 bits (c'est un objet COM, donc ce serait un assembly interop, si cela fait une différence). En supposant que Y n'est pas appelé de n'importe où dans le code, serai-je capable d'instancier C?

Répondre

1

Vous allez bien à plusieurs niveaux. Le #if garantit que votre code n'utilise aucun type de Y, le compilateur supprimera réellement la référence d'assemblage de l'assemblage final. Même si vous avez eu des références à des types Y dans votre code, ils peuvent en fait être compilés JIT parce que vous avez des métadonnées valides pour cela. Vous avez l'assembly interop. La seule chose que vous ne pouvez pas faire est de créer l'objet COM et d'appeler ses méthodes.

Vous pouvez utiliser un if régulier plutôt que #if. Vous permettant d'éviter de construire des assemblages séparés. Test IntPtr.Size est un bon moyen de savoir si vous exécutez en mode 64 bits.

+0

Merci, Hans. Y a certaines fonctionnalités que Z n'a pas, et je pense qu'il est possible que dans certains cas je pourrais vouloir utiliser l'assembly 32 bits sur un système 64 bits. Je devrais construire une version 32 bits spécifique pour cela, n'est-ce pas? – raven

+0

Définissez simplement le paramètre Platform Target du projet EXE sur x86 et vous pouvez toujours utiliser Y, même sur un système d'exploitation 64 bits. –

+0

Merci beaucoup, Hans. Vous êtes vraiment utile. Je posais cette question parce que dans ce cas, je perdrais les avantages d'utiliser un "si" régulier au lieu de "#if" (je dois maintenir les deux versions de toute façon). – raven

Questions connexes