declspec and stdcall vs declspec only

Viewed 14149

I'm a new person to C++ dll import topic and may be my question is very easy but I can not find it on google.

I have a very simple C++ win32 dll:

#include <iostream>

using namespace std;

extern "C"
{
    __declspec(dllexport) void __stdcall DisplayHellowFromDLL()
    {
        cout<<"Hi"<<endl;
    }
}

When I call this method from C# I do not have any problem, here is C# code

namespace UnmanagedTester
{
    class Program
    {
        [DllImport(@"C:\CGlobalDll")]
        public static extern void DisplayHellowFromDLL();

        static void Main(string[] args)
            {
                Console.WriteLine("This is C# program");
                DisplayHellowFromDLL();
            }
        }
    }

As I expected the output is: "This is C# program" "Hi".

Now if I change the declaration of C function as:

__declspec(dllexport) void DisplayHellowFromDLL()

without __stdcall, I do not have any problem as well, and the question is:

When do I really need __declspec(dllexport) TYPE __stdcall and when I can use only __declspec(dllexport) TYPE ?

Thanks a lot.

4 Answers
Related