Voilà mon problème :  
 
J'essaye d'attaquer une DLL dont je n'ai pas le source.
 
Avec les outil PEXPORT et DLLTOOL j'ai crée un fichier .def qui contient les noms des fonctions et créer une library objet
libskunkcmp.a
 
voici le contenu (une partie) du fichier .def  
LIBRARY SkunkCmp.dll
EXPORTS
??0CCat@@QAE@XZ
??0CChunkFile@@QAE@XZ
??1CCat@@QAE@XZ
??1CChunkFile@@QAE@XZ
??4CCat@@QAEAAV0@ABV0@@Z
??4CChunkFile@@QAEAAV0@ABV0@@Z
?AddChunk@CChunkFile@@QAEHKKPAXKH@Z
?CheckChunkFileSize@CChunkFile@@IAEHK@Z
?Close@CCat@@QAEXXZ
?Close@CChunkFile@@QAEXXZ
?ExpandFile@CCat@@SAHPAD0@Z
?ExtendFileSize@CChunkFile@@IAEHK@Z
?FindChunk@CChunkFile@@IAEPAUCHUNKREC@@KK@Z
?FreeAll@CCat@@QAEXXZ
?FreeFile@CCat@@IAEHPAUFILEHDR@@@Z
?FreeFile@CCat@@QAEHH@Z
?FreeFile@CCat@@QAEHPAD@Z
?GetCurrentFileSize@CChunkFile@@IAEKXZ
?GetFileCount@CCat@@QAEHXZ
?GetFileHdr@CCat@@IAEPAUFILEHDR@@H@Z
?Open@CCat@@QAEHPAD@Z
?Open@CChunkFile@@QAEHPADHK@Z
 
le code de mon main.cpp
 
| Code : 
 #include "skunkcmp.h"#include <iostream>#include <stdlib.h>#include <windows.h>#include <string.h>using namespace std;char *c1="C:\\FA-18\\Wrapper\\Brief.cmp";int main(int argc, char *argv[]){CCat *myCCat = new CCat() ;myCCat->Open(c1) ;system("pause" ) ;return 0;}
 | 
 
le code du fichier .h associé
| Code : 
 // skunkcmp.h
// my attempt at the class spec for:
//   CCat
#ifndef _DLL_H_#define _DLL_H_#if BUILDING_DLL# define DLLIMPORT __declspec (dllexport)#else /* Not BUILDING_DLL */# define DLLIMPORT __declspec (dllimport)#endif /* Not BUILDING_DLL *///------------------------------------------------------------------
//   CLASS CCat
//   Supports read/write of a file type called a catalog.
//   A catalog contains one or more compressed data files.
//   The first 32bit word in the file is the number of data files.
//   4 more unknown words follow.  The file record table then follows.
//   It is a table consisting of one entry for each file.  Each entry
//   is of the type FILEHDR (see below).
//------------------------------------------------------------------
typedef struct{   // 92 bytes for each file in a catalog
	//   this table starts at byte 0x14 in the catalog file
	//   there is one entry for each file in the catalog
	char         filename[64];  // original name of expanded file
	int          sizeex;        // original size of expanded_file;
	int          sizecmp;       // original size of compressed_file;
	char*        offset;        // distance from top of file to the compressed data;
	int          unk1;	int          unk2;	char*        filelocation;  // location of expanded and loaded file in memory
	int          unk4;} FILEHDR; //__declspec(dllexport) void CCat(void);
class DLLIMPORT CCat {	// data members 288 bytes
private:	char       Unk[260];            // unknown  maybe temp storage for compression routine?
	int        FileHandle;          // windows assigned file handle
	FILEHDR*   pFileHeader;         // pointer to top of FILEHDR table (probably should be public)
	int        FileCount;           // number of files in file
	int        Unk1;	int        Unk2;	int        Unk3;	int        Unk4;public:	//
	// GetFileCount
	//    returns number of files in current CCat
  int   GetFileCount(void);	//
	// Open
	//    opens file with name pointed to by c1
	//    reads the FILEHDR record table from the file
	//    returns 0=failure 1=success
int   Open(char* c1);	//
	// LoadFile
	//    reads and decompresses file with name pointed to by c1
	//      from the currently open CCat
	//    stores the location of the decompressed file at a
	//      location pointed to by p1
	//    stores the length of the files at a location
	//      pointed to by u1
  int   LoadFile(char* c1,void** p1,unsigned long * u1);	//
	// WriteFileToDisk
	//    writes a decompressed copy file with index i1 in the
	//      currently open CCat to disk into a file named c1
	//    i2==1 force overwrite, i2==0 disallow overwrite
  int   WriteFileToDisk(int i1,char* c1,int i2);	//
	// LoadFile
	//    reads and decompresses file with index i1 in the currently open CCat
	//    stores the location of the decompressed file at a
	//      location pointed to by p1
	//    stores the length of the files at a location
	//      pointed to by u1
  int   LoadFile(int i1,void** p1,unsigned long * u1);	//
	// FreeAll
	//     release all expanded files that have been loaded into memory
  void  FreeAll(void);	//
	// Close
	//    closes the currently open CCat
  void  Close(void);	//
	// FreeFile
	//     release file c1 from memory
  int   FreeFile(char* c1);	//
	// FreeFile
	//     release file i1 from memory
  int   FreeFile(int i1);	//
	// LoadAll
	//     load all file in catalog.  return number of successful loads
	//     the pointers to each expanded file needs to be obtained from
	//     the FILEHDR table separately
  int   LoadAll(void);	//
	// CCat assignment operator
  CCat& operator=(const CCat& );	//
	// ExpandFile
	//   expands a single compressed file c1
	//     into a single exploded file c2
	//   this function is unrelated to the CCat
	//     catalogs, and thus is static
  static int   ExpandFile(char* c1,char* c2);	//
	// CompressFile
	//   compresses a single file c1
	//     into a single compressed file c2
	//   this function is unrelated to the CCat
	//     catalogs, and thus is static
	//   the newly compressed file is not openable via the Open function
  static int   CompressFile(char* c1,char* c2);	//   probably determines if file c1 is compressed using
	//   the CompressFile function.  Since this is static, it
	//   is unlikely that it is usable on the CCat catalogs
	static int   IsCompressed(char* c1);	//
	// GetFileName
	//    returns a pointer to the filename of file with index i1 in the
	//      currently open catalog
  char* GetFileName(int i1);	//
     // Constructor
            CCat();   	//
	// Destructor
   ~CCat(void);protected:	//
	//**GetFileHdr
	//    returns pointer to the file table entry for
	//     file c1 in the currently open CCat
  FILEHDR* GetFileHdr(char* c1);
	//
	//**GetFileHdr
	//    returns pointer to the file table entry for
	//     file index i1 in the currently open CCat
  FILEHDR* GetFileHdr(int i1);
	//
	//**LoadFile
	//    called by the other LoadFile functions.
	//    This is where the real action is.
  int LoadFile(FILEHDR* p1);
	//
	//**CacheFile
	//     this is called from LoadFile(FILEHDR*)
	//     allocates space for the file to be loaded,
	//     and then acutually reads and decompresses the file
	//     and stores the location of the decompressed file into
	//     the filelocation slot of the current FILEHDR
  int CacheFile(FILEHDR* p1);
	//
	//**FreeFile
	//     frees up memory for the file referenced by p1
	int FreeFile(FILEHDR* p1);
public:
	//
	//  CreateCatalog
	//    opens a dialog box for selecting files
	//    to be added to a new catalog file.
  int CreateCatalog(void);
};
#endif /* _DLL_H_ */
 | 
 
Mon rapport de compil
Compilateur: Default compiler
Building Makefile: "D:\++p\TestDll\tools\dev\Makefile.win"
Exécution de  make...
make.exe -f "D:\++p\TestDll\tools\dev\Makefile.win" all
g++.exe main.o  -o "Skunkcmp.exe" -L"H:/DEV-CPP/lib" -L"D:/++p/TestDll/tools/dev" -lskunkcmp  
main.o(.text+0x5a):main.cpp: undefined reference to `CCat::CCat()'
main.o(.text+0x6b):main.cpp: undefined reference to `CCat::Open(char*)'
Exécution terminée
 
Comme vous pouvez voir il ne reconnait pas la classe CCat..
 
j'ai dessassemblé  la DLL qui m'intéressait et j'obtiens cela.
A priori par rapport à mon source cela doit correspondre. classe CCat..
| Code : 
 ??0CCat@@QAE@XZ proc nearjmp    ds:__imp_??0CCat@@QAE@XZ ; __declspec(dllimport) CCat::CCat(void)??0CCat@@QAE@XZ endppublic: int __thiscall CCat::Open(char *)?Open@CCat@@QAEHPAD@Z proc nearjmp ds:__imp_?Open@CCat@@QAEHPAD@Z ; __declspec(dllimport) CCat::Open(char *)?Open@CCat@@QAEHPAD@Z endp; public: __thiscall CCat::~CCat(void)??1CCat@@QAE@XZ proc near       jmp   ds:__imp_??1CCat@@QAE@XZ ; __declspec(dllimport) CCat::~CCat(void)??1CCat@@QAE@XZ endp
 | 
 
je vois cela dans la bibliothèque objet (ascii dump)
_?Open@CCat@@QAEHPAD@Z  
__imp__?Open@CCat@@QAEHPAD@Z
 
etc..
 
Je ne vois pas du tout ce que j'ai fait comme erreur  
si quelqu'un peut m'aider
 
Message édité par Frenchy62620 le 06-08-2004 à 13:57:13