Making a C function pointer work with C-style stack based calling mechanics in C++

Discussion in 'C++' started by mani8899, May 24, 2011.

  1. mani8899

    mani8899 New Member

    Joined:
    May 24, 2011
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    I want to call a pure C style function from a dll in my C++ program. I tried casting my function pointer using reinterpret_cast to __cdecl and still the calling convention of _stdcall seems to be preserved. I am new to Windows C++ programming.

    This is my C++ call
    Code:
    reinterpret_cast< Error ( __cdecl*)(int,int)> (GetProcAddress(Mydll::GetInstance()->ReturnDLLInstance(), "add"))(1,10)
    actual function in the dll is

    Code:
    Error __cdecl add(int,int);
    Debugger throws me the error run time check failure #0. I am working in Windows-C++. Also I am exporting functions from my dll and I dont have access to my C files.
     
  2. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Re: Making a C function pointer work with C-style stack based calling mechanics in C+

    Usually to call C from C++ you just need to extern "C" the prototype:
    Code:
    extern "C"
    {
    Error add(int,int);
    }
    
    Then the compiler knows not to mangle the name and not to look for a mangled name.
     
  3. mani8899

    mani8899 New Member

    Joined:
    May 24, 2011
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    Re: Making a C function pointer work with C-style stack based calling mechanics in C+

    Thanks! But what if I cannot work with the C code.I just have it as a dll. In that case is there a work around??
     
  4. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Re: Making a C function pointer work with C-style stack based calling mechanics in C+

    extern "C" is C++ code, not C code. This is what you put in the C++ code to make it call the function in the DLL. You still need a prototype, and you extern "C" it to stop the compiler mangling the names, then the linker resolves the call.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice