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