我无法从DLL导出数组。这是我的代码:
“DLL标题”
#ifdef EXPORT
#define MYLIB __declspec(dllexport)
#else
#define MYLIB
#endif
extern "C" {
/* Allows to use file both with Visual studio and with Qt*/
#ifdef __cplusplus
MYLIB double MySum(double num1, double num2);
extern MYLIB char ImplicitDLLName[];
#else
extern Q_DECL_IMPORT char ImplicitDLLName[];
Q_DECL_IMPORT double MySum(double num1, double num2);
#endif
}
“DLL源”
#define EXPORT
#include "MySUMoperator.h"
double MySum(double num1, double num2)
{
return num1 + num2;
}
char ImplicitDLLName[] = "MySUMOperator";
“客户端main.cpp”
int main(int argc, char** argv)
{
printf("%s", ImplicitDLLName);
}
构建时我从链接器获取此错误:
Error 2 error LNK2001: unresolved external symbol _ImplicitDLLName \Client\main.obj
//我导出数组的目的是研究从DLL中导出不同的数据结构
如何处理链接器引发的错误以及违反了哪些规则?
* 更新:*
IDE Visual Studio 2010.
客户端 - 用C ++编写,DLL也在C ++上编写
答案 0 :(得分:4)
假设您正确地链接了您的导入库(并且这是一个大假设),您没有正确地声明MYLIB导入符号:
此:
#ifdef EXPORT
#define MYLIB __declspec(dllexport)
#else
#define MYLIB
#endif
应该是这样的:
#ifdef EXPORT
#define MYLIB __declspec(dllexport)
#else
#define MYLIB __declspec(dllimport)
#endif
请记住,我们几乎无法使用上下文。 看起来就像你试图从C编译的应用程序中消费它一样,但没有更多信息我无法确定。如果是这种情况,那么Q_DECL_IMPORT最好做到以上情况,否则它仍然无效。我从一个基本的“C”链接导出开始,然后从那里开始工作。
示例EXPORTS.DLL
Exports.h
#ifdef EXPORTS_EXPORTS
#define EXPORTS_API __declspec(dllexport)
#else
#define EXPORTS_API __declspec(dllimport)
#endif
extern "C" EXPORTS_API char szExported[];
Exports.cpp
#include "stdafx.h"
#include "Exports.h"
// This is an example of an exported variable
EXPORTS_API char szExported[] = "Exported from our DLL";
示例EXPORTSCLIENT.EXE
ExportsClient.cpp
#include "stdafx.h"
#include <iostream>
#include "Exports.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << szExported << endl;
return 0;
}
<强>输出强>
Exported from our DLL