正确地编写DLL

Writing a DLL correctly

本文关键字:DLL 正确地      更新时间:2023-10-16

我仍然不完全确定如何在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。

编辑:

解决方案-> UPLOAD_EXPORT在Project Properties/c++/Preprocessor

下定义不正确

MSDN .h文件中的#define语句是正确的。您在构建DLL时定义UPLOAD_EXPORTS,因此所有UPLOAD_API函数都将声明为dllexport。您没有在其他任何地方定义它,因此所有客户端都将它们视为dllimport

PS:如果你希望在C和c++以外的语言中使用你的函数,你可能也想声明WINAPI(这意味着__stdcall)。但是请注意,使用dllexport而不是.def文件导出带有特定于调用约定的修饰(前导下划线等)的函数名