I needed to add a third party library to my project, and they only supply a .dll file (no .lib)
I have added the dll to the project by going to the project Property Page under Common Properties -> References -> Add New Reference
I can see the dll under the External Dependencies folder in the Solution Explorer, so I guess it was included correctly.
But how do I reference the dll? When I try to add an instance variable (For example, MCC::iPort::ASCII iPort) to access the dll class, I get Error: name followed by '::' must be a class or namespace name, but I know thats the class name I can see it in the dll info under External Dependencies.
The only way to access a bare DLL without a . lib file is to load the DLL explicitly with LoadLibrary() , get pointers to the exported functions you want to access with GetProcAddress() , and then cast those pointers to the proper function signature.
The only way to access a bare DLL without a .lib file is to load the DLL explicitly with LoadLibrary()
, get pointers to the exported functions you want to access with GetProcAddress()
, and then cast those pointers to the proper function signature. If the library exports C++ functions, the names you have to pass to GetProcAddress()
will be mangled. You can list the exported names with dumpbin /exports your.dll
.
extern "C" {
typedef int (*the_func_ptr)( int param1, float param2 );
}
int main()
{
auto hdl = LoadLibraryA( "SomeLibrary.dll" );
if (hdl)
{
auto the_func = reinterpret_cast< the_func_ptr >( GetProcAddress( hdl, "the_func" ) );
if (the_func)
printf( "%d\n", the_func( 17, 43.7f ) );
else
printf( "no function\n" );
FreeLibrary( hdl );
}
else
printf( "no library\n" );
return 0;
}
As has been noted by others, a LIB file can be created. Get the list of exported functions from dumpbin /exports your.dll
:
ordinal hint RVA name
1 0 00001000 adler32
2 1 00001350 adler32_combine
3 2 00001510 compress
(etc.)
Put the names into a DEF file:
EXPORTS
adler32
adler32_combine
compress
(etc.)
Now make the LIB file:
lib /def:your.def /OUT:your.lib
For cases where the name has been decorated, either by C++ name mangling or 32-bit stdcall
calling convention, simply copy and paste whatever names dumpbin
reported, mangling and all.
If you don't have a .lib
file you can create one from the .dll
:
https://web.archive.org/web/20160228170508/https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With