__declspec()
и __cdecl
обращаются к двум различным аспектам вызова функции, и вы можете (и в этом случае по звукам этого вы должны) использовать оба.
__cdecl
определяетсоглашение о вызовах, которое определяет, как параметры передаются в функцию через стек, и, что очень важно, кто впоследствии очищает стек (в случае __cdecl
это вызывает вызывающий компонент).
__declspec(dllimport/dllexport)
используется для упрощения экспорта определений функций из DLL: вам не нужно их использовать, но другие способы экспорта функций довольно громоздки.
Вероятно, это хорошая идея явно использовать __cdecl
вместо того, чтобы делать то, что сделал фрагмент кода, который зависит от компилятора при выборе соглашения о вызовах.Я думаю, вы можете переопределить это с помощью переключателей командной строки, и я считаю, что значение по умолчанию отличается в зависимости от того, компилируете ли вы код на C или C ++, поэтому более явный (как обычно) лучше.