2016-01-05 1 views
-1

J'ai un C++ dll écrit en studio visuel 2012. Je voudrais le charger dans un programme C# (VS2012 aussi) en utilisant la fonction LoadLibrary.
J'ai défini SetLastError = true pour obtenir le code d'erreur renvoyé probabiliste par LoadLibrary. Quand je lance mon programme C#, je reçois toujours le code d'erreur 998 mais je ne comprends pas ce qui ne va pas!
Si vous m'aidiez à résoudre ce problème, s'il vous plaît?
Toute aide serait appréciée.LoadLibrary() code d'erreur 998

(Il faut mentionner que j'ai vu des messages sur le code d'erreur 998, mais aucun d'entre eux ne pouvait me donner une solution.)

+2

Cela pourrait être bénéfique de noter les messages au cas où vous auriez manqué quelque chose que quelqu'un d'autre pourrait remarquer. –

+0

Il est méchant, le point d'entrée DllMain() de la DLL a échoué avec une exception AccessViolationException. A propos de la pire chose qui puisse aller mal. Ce n'est pas quelque chose que vous pouvez corriger vous-même, ou demander aux utilisateurs de SO de corriger pour vous, vous devez utiliser un téléphone pour obtenir de l'aide de l'auteur ou du propriétaire. –

+0

@HansPassant En raison de paroles du développeur de DLL, elle a utilisé: 'extern "C" { \t __declspec (dllexport) int __stdcall Démarrer (ID int) \t { \t \t // corps \t} }' exporter la méthode 'Start (int ID)' et DllMain n'a pas été utilisée. –

Répondre

0

En réponse à ce commentaire « s'il vous plaît me dire comment puis-je faire cette instruction ":

pour résoudre l'échec LoadLibrary(), exécutez l'application sous un débogueur et d'abord activer le traitement des exceptions de chance pour la C0000005 exception de violation d'accès. Si une violation d'accès se produit lorsque la fonction LoadLibrary() est appelée, l'application va pénétrer dans le débogueur . La pile d'appels du débogueur peut ensuite être utilisée pour tracer où l'exception s'est produite. La trace de la pile devrait vous aider à affiner le problème réel lié à l'exception rencontrée.

  1. Ouvrez votre projet dans Visual Studio

  2. Dans le menu, cliquez sur Debug>Exceptions

  3. Dans la fenêtre Exceptions, cliquez sur Find... et entrez C0000005 cliquez Ok

  4. Cochez la case à côté de l'exception surlignée sur sous la colonne Thrown.

Maintenant, lorsque vous déboguer votre programme et l'exception est levée, il se brisera et vous devriez être en mesure d'au moins examiner les détails de l'exception de l'exception levée.

Il est probable que vous serez jeté dans la fenêtre de désassemblage afin de ne pas voir de code lisible. Si le détail de l'exception n'est pas suffisant, vous pouvez essayer de décompiler avec Dot Peek. Il s'agit d'un tutorial on enabling Dot Peek as a symbol server. Ce faisant, nous espérons décompiler la bibliothèque à la volée afin que vous puissiez commencer à inspecter la ligne de code à l'origine de l'exception.