Calling a dll function from C++

2019-04-08 13:28发布

问题:

I have a function inside a dll that I would like to call from my C++ application. The dll is also made in C++ and has a def file which shows the functions present in the dll. I am using visual studio 2010 and I configured it to use the dll file by adding the directory of the dll in the linker "Additional Library directories" and then adding the DLLname.lib in the "input" of the linker. Now all the namespace inside the dll are available however the Functions that I need are not available because they are not under any namespace. How do I go about accessing those functions ? Those functions were declared as such in the dll

#include "stdafx.h"
#include <stdio.h>
__declspec(dllexport) int somefunction()
{
......
            return SomeValue
}

My question is how do I access somefunction in my C++ application through its dll.

回答1:

There seems to be some confusion here. Adding a file to the linker input is for statically-linked libraries (.lib on Windows). With statically-linked libraries, the code is just copied into your program at compile time. Dynamically-linked libraries (.dll in Windows) reside in different files (the DLLs) and are loaded by your program when you run it. To access a function in a dll, there's two main methods:

  • Use dllimport, similarly to how you exported the functions with dllexport

  • Load the DLL using LoadLibrary, then get a pointer to your function with GetProcAddress. If you're using this method, another thing you should note is that you should likely use extern "C" on functions you're exporting to avoid name mangling. If you're having issues finding the function with GetProcAddress, you can use Dependency Walker to examine the function names inside the DLL - they may be modified slightly depending on the calling convention used.



回答2:

I think the poster is asking for help on implicit linking. MSDN Linking Implicitly and Wikipedia Dynamic-link library Using DLL imports



标签: c++ dll