我正在使用Visual Studio 2012而我在不使用MFC的情况下创建了dll,它生成了dll。但是当我指定使用以下选项在特定目录中生成lib文件时: - 转到proeperties页面 - > Advanced->导入库 ../../../ LIB / myapp.lib
它不是在指定文件夹中生成lib文件。请帮帮我。
谢谢&问候 维卡斯
答案 0 :(得分:2)
刚刚解决了类似的问题。 Visual Studio不会在不指示在dll中公开哪些对象的情况下创建.lib文件。您需要创建一个win exports头,如下所示:
#ifndef BLABLABLA
#define BLABLABLA
#ifdef MYAPPLIB_EXPORTS
#define MYAPPLIB_API __declspec(dllexport)
#elif defined(MYAPPLIB_EXPORTS_STATIC)
#define MYAPPLIB_API
#else
#define MYAPPLIB_API __declspec(dllimport)
#endif
#endif // !BLABLABLA
然后,您需要将MYAPPLIB_EXPORTS声明为预处理器宏。将此新头文件包含在其他API标头中后,对于要在API中公开的每个类或方法,可以将MYAPPLIB_API添加到其声明中,如:
class MYAPPLIB_API MyClass{ ... };
答案 1 :(得分:0)
请参阅以下内容:您可能需要声明/ EXPORTS(http://msdn.microsoft.com/en-us/library/7k30y2k5.aspx)
http://msdn.microsoft.com/en-us/library/67wc07b9.aspx请参阅“备注”
答案 2 :(得分:0)
calculatelibrary.h
/ * 默认情况下,DLL的“新建项目”模板会将PROJECTNAME_EXPORTS添加到DLL项目的已定义预处理器符号中。 在此示例中,在构建calculateLibrary DLL项目时定义CALCULATELIBRARY_EXPORTS。 定义CALCULATELIBRARY_EXPORTS符号时,CALCULATELIBRARY_API符号在此代码中的成员函数声明上设置__declspec(dllexport)修饰符。 此修饰符告诉编译器和链接器从DLL导出函数或变量,以便其他应用程序可以使用它。 当CALCULATELIBRARY_EXPORTS未定义时 - 例如,当客户端应用程序包含头文件时 - CALCULATELIBRARY_API在成员函数声明上定义__declspec(dllimport)修饰符。此修饰符可优化应用程序中函数的导入。有关详细信息
* /
#ifndef _calculate_library_h
#define _calculate_library_h
#ifdef CALCULATELIBRARY_EXPORTS
#define CALCULATELIBRARY_API _declspec(dllexport)
#else
#define CALCULATELIBRARY_API _declspec(dllimport)
#endif
namespace calculatelibrary
{
class CALCULATELIBRARY_API clsCalculateLibrary{
// Returns a + b
double Add(double a, double b);
};
}
#endif _calculate_library_h
// CalculateLibrary.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "CalculateLibrary.h"
namespace calculatelibrary
{
double clsCalculateLibrary::Add(double a, double b)
{
return a + b;
}
}