Calling an Exported Function in an EXE from Within a DLL

Environment: VC6, SP4, 2K, SP2

This article explains a better way of calling a function in an EXE file from a dependent DLL of the same EXE. In other words, calling a DLL's function from an EXE is the normal way; this is the reverse of the same.

On CodeGuru I have found a couple of FAQs talking about the same issue. They tell you to have a call back function to hold the pointer from the EXE and so on, but they look primitive. In this article, I have given a better method of calling functions from the EXE. I would be glad if this helps someone in need.

In the EXE:

// Do exactly as you would export a DLL...
extern "C"
{
  EXPORT void ExeFn(char * lpszMessage)
  {
    MessageBox(NULL,lpszMessage,"From Exe",MB_OK);
  }
}

In the DLL:

        ...
// Get the handle of the EXE that loaded us.

FnPtrT FnPtr = (FnPtrT)::GetProcAddress(GetModuleHandle(NULL),
                "ExeFn");
if(FnPtr)
  (*FnPtr)("Message From The DLL");
else
  MessageBox(NULL,"It Did Not work :(","From DLL",MB_OK);

        ...

Downloads

Note: In this demo project, I have just implemented the above-mentioned exports. The EXE calls the DLL's function and that function calls a function in the EXE. Those functions do nothing more than display message boxes, so there's no point in giving a demo EXE. Just build the source; you must get the DLL and EXE.

How to Build It

  • Extract the source zip file. Open workspace "ExportingExe.dsw".
  • Ensure that ExportingExe is the active project. Now, you can build and run it.
  • Because Importing.DLL is a dependency of the other one, you don't have to bother about anything else.
Download source - 16 Kb


Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: May 18, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT While the idea of using facial and or gesture recognitions to create a modern, intuitive game seems attractive, some developers may want to leverage Unity 3D as a way to accelerate their development. There are many different ways in which Intel and Unity Technologies have been working together to helps speed the develop of games with the Intel® RealSense™ SDK (Software Developer Kit), so come hear from a panel of experts on what we've done …

  • There has been growing buzz about DevOps. DevOps is a methodology that unites the often separate functions of software development (Dev) and production and operations (Ops) into a single, integrated, and continuous process. DevOps is about breaking down the barriers between Dev and Ops. It leverages people, processes, and technology to stimulate collaboration and innovation across the entire software development and release process. Dev and Ops should always be part of an integrated process, but that's not …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date