La conversion d'une Dll de Windows .lib en C++, Visual Studio 2008

Je sais qu'il existe un outil appelé Dll pour lib, mais le développeur est de demander à $1000.
J'ai seulement besoin de convertir une bibliothèque, une fois, donc ce n'est pas facile à justifier ce prix.

J'ai essayé IMPLIB32.EXE mais je viens de me vider .fichiers lib.
Comment puis-je accomplir?
Peut-être que je peux écrire une simple application de conversion?

Added1:

De la Dll sont généralement stdcall pas cdecl et écrit dans les vieux C comme les langues, C# ou .NET ou C++. J'ai maintenant besoin de les appeler à partir de C++ apps. Un exemple serait la SQLite.dll ou zlib.dll.
Je n'ai pas accès à l' .fichiers lib pour ces dll.

Added2:

Je l'ai ré-écrit ce code pour VS2008
http://floodyberry.wordpress.com/2008/09/08/generating-dll-wrappers/
et inclus l'exemple de Dll, etc téléchargeable ici:
http://www.transferbigfiles.com/Get.aspx?id=7d86fa0b-6ddc-4f6f-8d31-2c20824aae9a
Ce tour en fait un projet qui crée une Dll. Lorsque j'essaie de compiler la Dll-je obtenir de l'éditeur de liens d'erreur:
AddShow.dll : erreur fatale LNK1107: invalide ou corrompu le fichier: impossible de lire à 0x300
Il est décrit ici:
http://list.isis.vanderbilt.edu/pipermail/udm-users/2006-March/000664.html
Pas sûr de savoir comment procéder. Si proche et pourtant si loin

Ensuite, nous déplaçons à cette méthode

http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/

De course dumpbin avec l'argument /exportations C:\path\to\AddShow.dll
ne fait absolument rien
Après quelques recherches

http://msdn.microsoft.com/en-us/library/aa446532.aspx
il semble que mspdb71.dll (maintenant mspdb80.dll) est nécessaire à partir de la commune/ide dossier
dumpbin.exe fonctionne maintenant avec l'erreur:

erreur fatale LNK1106: fichier non valide ou disque plein: ne peut pas chercher à 0x6179A
Ces threads suggère la version de dumpbin.exe peut-être la question

J'ai Microsoft (R) COFF/PE Dumper Version 9.00.30729.01

J'ai donc essayé
Microsoft (R) COFF Fichier Binaire Dumper Version 5.12.8078
sans succès.
Après beaucoup de lecture, je suis pas près

http://support.microsoft.com/kb/815645
http://support.microsoft.com/kb/839286
http://markmail.org/message/p5vwzyfyv3bs6z34
http://fixunix.com/programmer/94825-fatal-error-lnk1106-invalid-file-disk-full.html

Quand je lance ProcMon je vois la première occurrence de queryopen et sqlite3.dll lorsque svchost.exe essaie de l'ouvrir et échoue avec l'erreur de CHEMIN d'accès introuvable. le chemin est C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\SQLITE3.DLL et c'est exact. Si je l'ai mis à la racine du lecteur C, puis-je obtenir le NOM est introuvable erreurs:

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lien.exe.Local

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe.Local

de link.exe et dumpbin.exe respectivement. Im en utilisant XPSP3 pas Vista et c'est la limite de mes connaissances de sysinternals. quels sont ces .les fichiers locaux?

(csrss.exe aussi, n'est pas en mesure de trouver quelques fichiers manifest.)

Donc pas de succès encore, juste un peu plus de mystère

Ajouté 3:

J'ai essayé d'exécuter dumpbin.exe à partir de son emplacement d'installation, \Program Files\Microsoft Visual Studio 8\VC\bin, mais l'OS a dit qu'il ne pouvait pas trouver mspdb80.dll. J'ai copié mspdb80.dll à partir de \Program Files\Microsoft Visual Studio 8\Common7\IDE pour essayer d'obtenir dumpbin.exe pour l'exécuter.

maintenant j'ai l'erreur:
"c1902 programme de gestionnaire de base de données incompatibilité veuillez vérifier votre installation"

Si je supprime mspdb80.dll à partir de \Program Files\Microsoft Visual Studio 8\VC\bin l'erreur disparaît! mais je ne peux pas courir dumpbin.exe.

Ajouté 4:

J'ai finalement été en mesure d'obtenir dumpbin à exécuter en copiant les fichiers suivants dans un dossier:

dumpbin.exe
link.exe
lib.exe
mspdb80.dll

Je n'obtiens l'erreur:

erreur fatale LNK1248: la taille de l'image (FFFFFXXX) dépasse la taille maximale autorisée
(80000000)

une fois, mais le fait de remplacer la dll fixes. On peut supposer que c'est corrompue?

J'ai ensuite déménagé à la prochaine étape dans les instructions:
http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/
http://support.microsoft.com/kb/131313
et j'ai obtenu le message d'erreur:
avertissement lnk4017 déclaration qui n'est pas pris en charge pour la plate-forme cible ignoré
Cela s'avère être parce que j'ai spécifié l' .dll à la place de la .fichier def.

La résultante .Lib et .exp fichiers sont ensuite ajoutés à la VS2008 projet et le compiler et l'exécuter. Le débogueur ensuite signalé une erreur:
Le Temps d'exécution de l'Échec du contrôle de #0 - La valeur de l'ESP n'a pas été correctement enregistrées à travers un appel de fonction...

Comme mentionné ici
"Le Temps d'exécution de l'Échec du contrôle de #0 - La valeur de l'ESP n'a pas été correctement enregistrées à travers un appel de fonction" après le succès de C# de rappel à partir du code C++ de GameSpy lib
c'est parce que j'ai utilisé stdcall dans ma dll et déclarée __cdecl dans mon application.

extern "C" { //put Dll C function prototypes here
 int __cdecl AddTwoNum(int n, double f); //__stdcall
}

Modifier cela à __stdcall devrait résoudre le problème vous ne le pensez.. mais hélas non.

maintenant, je reçois une erreur de couplage:
erreur LNK2001: symbole externe [email protected]

C'est un décorée nom de la fonction pour une raison quelconque. Pourquoi?

Ajoutée n:

Bien ce qui s'est avéré être à cause de la .fichier lib a été faite à l'aide d'un fichier dll avec STDCALL fonctions. STDCALL prevoit l'appelant pour nettoyer la pile de sorte que le nombre d'octets de l'argumentation est ajouté le nom de la fonction avec un [email protected] DANS ce cas, j'ai eu trois 4Byte iintegers pour un total de 12 octets.

Une fois que j'ai refait de la .fichier lib à partir d'une dll créé avec la CDECL convention d'appel puis tout était bon.

Est-ce un natif C/C++ DLL ou un .NET?
Attendez une minute... ça ne Serait pas plus facile, au moins dans le cas de la zlib et sqlite3, pour obtenir l'original de bibliothèques d'importation ?
sqlite est juste un exemple que tout le monde a entendu parler de. Je sais que l'original inport bibliothèques existent pour cela, mais la dll je suis en train de convet (AddTwoNum.dll) ne fonctionne pas.
Je pense que vous devriez poster une nouvelle question concernant la mise à jour. Il peut bénéficier d'un nouveau titre et un nouveau jeu de answerers.

OriginalL'auteur |

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *