2009-03-14 16 views
5

Mi è stata assegnata una piccola libreria, costituita da una DLL, un'intestazione .h e un file .def. Sono abbastanza sicuro che la libreria sia stata scritta in C, ma possibilmente in C++.Utilizzo di una DLL con l'intestazione .h in C++

È possibile accedere alle funzioni della libreria senza utilizzare il metodo LoadLibrary/GetProcAddress/FreeLibrary di cui si parla in genere. Non ho un file .lib - è normale averne uno?

Ho passato letteralmente gli ultimi 2 giorni a cercare questo. Sembra che da quando mi è stato dato un file di intestazione che definisce le funzioni che desidero utilizzare dalla dll e un file .def, non avrei bisogno di "caricare" esplicitamente ciascuna funzione manualmente (LoadLibrary/GetProAddress/FreeLibrary) - in Nel mio caso userò circa 5 o 6 funzioni dalla .dll, ma ce ne sono circa 70 disponibili e sembra che sarebbe un mal di testa e comporterebbe un inutile caos di codice.

Grazie per qualsiasi consiglio.

risposta

3

Visual C++ ha "lib "- consulta l'aiuto in linea.

Utilizzare "lib/def" per creare il file .lib.

2

È necessario un file lib: contiene gli stub di cui il linker deve creare la tabella di importazione per la DLL.

Non sono sicuro se questo dovrebbe funzionare, ma si può provare:

Creare un file .C con stub vuote e file DEF. Compilare come una DLL con lo stesso nome per generare il .lib. Getta via la nuova DLL e collegala alla lib, se la DLL esistente si trova nella stessa directory del tuo exe, il tuo programma dovrebbe essere in grado di caricarlo e collegarlo.

Credo che funzionerà perché le DLL native non hanno un nome sicuro.

7

Ci sono diversi modi per creare una libreria di importazione per una DLL - Microsoft documenta un metodo per creare uno per costruire il proprio file DEF: