2009-08-24 14 views
0

J'ai une simple DLL C qui expose les fonctions d'une bibliothèque statique. La DLL compile sans erreur et je peux lancer DUMPBIN pour voir les exports. Cependant, lorsque je tente de le charger avec DllImport en C#, il est dit ceci:Pourquoi cl.exe ne produit-il pas un module Windows valide?

System.DllNotFoundException: Unable to load DLL 'ei.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E).

Il est dans le bon répertoire, bien sûr. Donc, j'ai lu que ce pourrait être une bonne idée d'essayer Dependency Walker, au cas où je devrais inclure quelque chose d'autre. Malheureusement, quand je tente d'ouvrir un DLL dans DW, je reçois ceci:

Error: At least one file was not a 32-bit or 64-bit Windows module.

Voici ma commande cl:

set ERL_INTERFACE_DIR=C:\Progra~1\erl5.7.2\lib\erl_interface-3.6.2\ 
call vcvars32.bat 
cl /I%ERL_INTERFACE_DIR%include /LD ei.c ei.lib Ws2_32.lib /link /LIBPATH:%ERL_INTERFACE_DIR%lib 

Ce qui pourrait être la cause?

+0

Mieux afficher la sortie (liste des modules) du dépendant des dépendances. – EFraim

+0

EI.DLL <- C'est le seul. Il y a un cercle rouge à côté. –

Répondre

0

Je liaient avec un fichier LIB dont le nom est le même que le fichier LIB que le compilateur émet, donc il était lié avec lui-même. Je viens de changer le nom de mon fichier source en ErlInterface.c. Je pense que le linker lancerait un avertissement ou quelque chose quand cela arrivera, mais ce n'est pas le cas.

Quoi qu'il en soit, je peux ouvrir la DLL dans Dependency Walker maintenant, mais je ne peux toujours pas l'utiliser avec DllImport. C'est pour une autre question, cependant.