如何从DLL导出数组?

时间:2013-03-04 10:50:31

标签: c++ arrays dll dllexport

我无法从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 ++上编写

1 个答案:

答案 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