我仍然不完全确定如何在Visual Studio中正确编写DLL。
档案.h
#ifndef UPLOAD_H_
# define UPLOAD_H_
# ifdef UPLOAD_EXPORT
# define UPLOAD_API __declspec(dllimport)
# else
# define UPLOAD_API __declspec(dllexport)
# endif // UPLOAD_EXPORT
#include <Windows.h>
#include <WinInet.h>
extern "C" UPLOAD_API int uploadFTP(
const char *...,
const char *...,
const char *...,
const char *...,
const char *...,
const char *...);
#endif // UPLOAD_H_
文件.cpp
#include "upload.h"
extern "C" UPLOAD_API int uploadFTP(
const char *...,
const char *...,
const char *...,
const char *...,
const char *...,
const char *...)
{
...
}
这实际上有效,但在MSDN上写入.h文件:
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
这实际上与我正在做的相反,并且他们没有在.cpp文件的函数上指定MATHFUNCSDLL_API。
修改
解决方案 - &gt;在Project Properties / C ++ / Preprocessor
下未正确定义UPLOAD_EXPORT答案 0 :(得分:2)
MSDN&lt; .h。文件中的#define
语句是正确的。在构建DLL时定义UPLOAD_EXPORTS
,因此所有UPLOAD_API函数都将声明为dllexport
。您无法在其他任何位置定义它,因此所有客户都会将其视为dllimport
。
PS:如果您希望从C和C ++以外的语言中使用它们,您可能还想声明函数WINAPI
(这意味着__stdcall
)。但请注意,使用dllexport
而不是.def文件导出具有特定于调用约定的装饰的函数名称(前导下划线等)