2

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 VisualStudio2010。
クライアント-C++で記述されており、DLLもC++で記述されています。

4

1 に答える 1

5

インポート ライブラリを正しくリンクしていると仮定すると (これは大きな仮定です)、シンボルをインポートするために 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

エクスポート.h

#ifdef EXPORTS_EXPORTS
#define EXPORTS_API __declspec(dllexport)
#else
#define EXPORTS_API __declspec(dllimport)
#endif

extern "C" EXPORTS_API char szExported[];

エクスポート.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
于 2013-03-04T11:07:58.100 に答える