2013-01-01 2 views
1

Je ne comprends pas très bien l'utilisation d'une DLL d'interopérabilité 32 bits avec un processus 64 bits. Afin d'avoir accès à 8 To de mémoire, je vais construire mon application pour 64 bits, malheureusement, il utilise une librairie interop statistique qui est construite en mode 32 bits. Je n'ai pas de sources pour cette bibliothèque, donc je ne peux pas la reconstruire en 64 bits.Utilisation d'une DLL d'interopérabilité 32 bits dans une application 64 bits

Dans l'article this, la suggestion est de créer un processus de substitution 64 bits qui communiquera avec mon application en utilisant IPC (par exemple, WCF). Here nous pouvons trouver la solution qui utilise Runtime Callable Wrapper (RCW). Ce qui est mieux? J'ai commencé à mettre en place un processus de substitution et aujourd'hui, j'ai trouvé la deuxième solution que je ne sais pas si elle convient à mes besoins.

Je dois mentionner que cette bibliothèque d'interopérabilité statistique a des centaines d'interfaces et de classes. J'ai toujours besoin de quelques-uns d'entre eux. J'ai commencé à créer un service WCF en hébergeant plusieurs comme points de terminaison et il semble que ce sera beaucoup de code/travail. Puis-je utiliser la seconde méthode (RCW) à utiliser avec une DLL d'interopérabilité?

Cordialement, jotbek

+3

J'opterais probablement pour COM, mais il n'y a probablement pas beaucoup entre ces options. Lequel est le plus pratique et facile pour vous? Maintenant, dans votre position, je envisagerais fortement de perdre la dépendance de cette bibliothèque tierce. J'aime toujours construire à partir de la source et une dépendance sur une boîte noire qui n'existe que dans le code 32 bits me donnerait la peur. Il y a des tas de bonnes bibliothèques statistiques autour. Ne pouvez-vous pas en trouver un qui soit plus à l'épreuve du futur? –

+0

Malheureusement, le point principal est d'utiliser cette bibliothèque. Donc vous pensez que ce n'est pas un problème d'utiliser la solution RCW pour Interop dll? – jotbek

+0

Nous ne connaissons pas vos exigences de perf. RPC peut avoir perf. implications. Mais s'ils ne sont pas significatifs, alors utilisez n'importe quel RPC pour vous. Très difficile d'imaginer qu'il n'y a qu'une lib qui répond à vos besoins. –

Répondre

4

Eh bien, "meilleur" est un terme chargé. Mais, oui, les substituts de COM peuvent faire un helluvalot plus simple pour obtenir ceci. Si vous pouvez utiliser le substitut du système, les probabilités sont presque toujours bonnes lorsque la bibliothèque est bien conçue, alors vous devez simplement dupliquer les clés de registre dans les clés 64 bits et en modifier quelques-unes pour utiliser le substitut et tout cela fonctionne sans vous écrivez n'importe quel code du tout. La page de démarrage MSDN is here.

Cela ne fonctionnera pas lorsque la bibliothèque ne prend pas en charge le marshaling inter-appartements. Si vous n'avez aucune idée si c'est le cas, essayez d'appeler une fonction de bibliothèque à partir d'un thread de travail. Si cela ne fonctionne pas, ne vous embêtez pas. Et vous perdrez le "mieux" si cette bibliothèque est sujette à des bogues qui se brisent, ce qui se révèle invariablement mal dans un scénario hors-processus. La vitesse peut être un problème, les appels hors processus ont beaucoup de frais généraux. Mais vous êtes coincé avec ça de toute façon. Vous obtiendrez de bonnes réponses au lieu de deviner SO en contactant le propriétaire de la bibliothèque pour obtenir de l'aide.

Questions connexes