Error 0xC0000005: Using dll exported c++ function in .exe causes access violation

-1

I created a small solution in Visual Studio 2017 to illustrate a problem I encountered. The solution contains two projects: mainapp.vcxproj and sideapp.vcxproj. Each project contains only a main.cpp file.sideapp is set as startup project.

mainapp/main.cpp

__declspec(dllexport) void testFunc()
{
    char* test = new char;
    delete test;
}

int main()
{
    testFunc();
}

sideapp/main.cpp

__declspec(dllimport) void testFunc();

int main()
{
    testFunc();
}

sideapp is linked against mainapp.lib and everything builds without warnings or errors. This works if mainapp is built as a .exe or a .dll.

If mainapp is built as a .dll, sideapp runs correctly. If it is built as an .exe, the line

char* test = new char

triggers an exception: Exception thrown at 0x0001B4E0 in sideapp.exe: 0xC0000005: Access violation executing location 0x0001B4E0. The error persists if both projects are compiled in Release or in Debug.

The questions: Why is the behavior different between these two compilation parameters? And is there a way to avoid these exceptions without compiling mainapp as a dll?

c++
exe
dllimport
access-violation
dllexport
asked on Stack Overflow Jul 27, 2018 by Rémi Cossette-Roberge • edited Jul 27, 2018 by Rémi Cossette-Roberge

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0