declspec и stdcall vs declspec only

Я новичок в теме импорта DLL C ++ и, возможно, мой вопрос очень простой, но я не могу найти его в Google.

У меня очень простая DLL-библиотека C ++ win32:

#include <iostream>

using namespace std;

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

Когда Я вызываю этот метод из C #, у меня нет никаких проблем, вот код C #

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

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

Как я и ожидал, результат будет: «Это программа C #» «Привет».

Теперь, если я изменю объявление функции C как :

__declspec(dllexport) void DisplayHellowFromDLL()

без __stdcall, у меня тоже нет проблем, и вопрос:

Когда мне действительно нужен __declspec (dllexport) TYPE __stdcall, а когда я могу использовать только __declspec (dllexport) TYPE?

Большое спасибо.

14
задан ilyaw77 13 June 2011 в 18:03
поделиться