Как экспортировать массив из DLL?

Я не могу экспортировать массив из DLL. Вот мой код:

«Заголовок DLL»

#ifdef EXPORT
#define MYLIB __declspec(dllexport)
#else
#define MYLIB
#endifextern "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

Решение

Предполагая, что вы правильно связываете свою библиотеку импорта (и это большой предположения), вы не объявляете 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
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]