2009-04-09 9 views
0

Mon programme est écrit en C# NET 2.0, il utilise des fonctions externes d'une DLL écrite en C++ en utilisant Microsoft Visual Studio 2008 SP1. Si je supprime la DLL du répertoire où le programme est placé, le programme se bloque au moment où il devrait utiliser la DLL. C'est normal.Crash C# lors du chargement C++ dll

Mais les utilisateurs qui utilisent mon programme obtenir la même erreur au même endroit sans bouger le dll.They ont tous C++ 2008 redistribuable de >here<

-t-il arriver parce que je fait le programme plutôt que dans .NET 2.0 de NET 3.5 ou il arrive, parce que le redistribuable devrait être une version plus ancienne?

Modifier: Notez pour moi, le programme fonctionne bien.

>>new thread<<

+0

Quel est le message d'erreur réel pour les utilisateurs où cela ne fonctionne pas? –

Répondre

1

Son de dll très probablement le mauvais temps d'exécution. Assurez-vous que vous distribuez le bon. Ceux-ci fonctionneront toujours sur votre boîte de dev car les runtimes sont dans le chemin. Pour tester un logiciel, j'utilise une machine virtuelle Windows XP. Je configure la machine virtuelle comme une installation complètement nouvelle, installe les composants dont j'ai besoin (framework .NET, etc.), puis lance mon installateur. Vous rencontrerez un nombre surprenant de problèmes d'installation.

+0

J'accepte votre réponse seulement, parce que vous avez mentionné VM Box.J'ai utilisé cela.Veuillez vérifier ma nouvelle question pour plus d'informations. –

0

Le C++ redistribuable que vous avez accédé à ressemble il est de la version originale de Visual Studio 2008. Si cela change avec SP1, je pouvais voir que causer l'accident. Peut-être qu'il existe une version mise à jour du redistribuable que vos utilisateurs doivent installer?

0

Il y a très peu d'informations dans votre question sur le crash réel qui pourrait signifier plusieurs choses. Dans mon expérience avec le mélange .NET et C++ natif, de nombreux problèmes peuvent survenir dans le side-by-side (SxS), en particulier si la DLL et l'application .NET ont été construites avec différentes versions du compilateur.

Vous devez probablement reproduire ce problème sur une machine locale pour le déboguer.

0

Dependency Walker peut être excellent pour repérer ces types de problèmes. Vous pouvez charger une DLL dans celui-ci et il vous dira si l'une de ses dépendances est indisponible. Parfois, les DLL manquantes ne sont pas nécessairement un problème (si vous ne descendez pas ce chemin de code), mais c'est tellement mieux que de deviner.

0

Aucune différence dans ce contexte d'utilisation de .NET 2.0 ou 3.5.
Rechercher dans la méthode où vous établissez un lien et les fonctions d'exportation de C++ (si non géré) Si les fonctions externes avaient écrit sur C++ géré, regardez dans la signature et la version de