Search code examples
c++dllrundll32

Running C++ DLL with rundll32 - Missing entry


So I'm trying to use rundll to test and run my C++ written DLL , and i've followed the guidelines here and on other sites and the entry point looks like this:

__declspec(dllexport)  void CALLBACK entry(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
    //do stuff
}

But the rundll process prompts me with an error message box saying "Error in C:\path\to\DLL Missing entry: entry"

Attempted execution command: "rundll32 C:\path\to\DLL, entry".


Solution

  • You can double-check by running Dumpbin.exe /exports on your DLL to see the actual exported name. Which right now is not entry, as the error message tells you.

    You need to prefix extern "C" to the declaration to disable C++ name mangling.

    Good enough for a 64-bit executable, but that turns it into _entry@16 if this is a 32-bit DLL, still not quite good enough to keep rundll32 happy. Use Project + Add New Item, Code node, pick the "Module-Definition File (.def)" item template. And make it look like this:

    EXPORTS
    entry = entry