正确地编写DLL
Writing a DLL correctly
我仍然不完全确定如何在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文件导出带有特定于调用约定的修饰(前导下划线等)的函数名
相关文章:
- 如何正确地将分支添加到已存在的树中
- 如何正确地将带有指针的数组传递给函数
- 如何正确地推回然后遍历堆中对象的向量?
- 我是否不正确地集中了这些字符数组?
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 我怎样才能通过友谊正确地履行我的职能?
- C++:如何正确地将 deque::front() 返回的变量从函数中传递出去?
- 我应该如何正确地将packaged_task移动到 lambda?
- 如何正确地将SHA1CryptoServiceProvider转换为c ++?
- 如何正确地对 constexpr 函数进行单元测试
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 如何正确地将boost::asio::buffers_iterator转换为InputIterator
- 如何正确地检查变量char中包含的字母
- 当试图交换可变模板类时,如何正确地重载operator=
- 如何正确地将 boost::optional<std::chrono::d uration> 作为函数参数?
- 如何正确地从dll返回std::list
- 如何在VC++2015全程序优化的情况下正确地从dll中公开接口
- 正确地编写DLL
- 如何正确地将浮点数从c#传递到c++ (dll)