-1

こんにちは私はdllを使用してアプリケーションを実行しようとしています。Dev C ++を使用していますが、常にリンカーエラーが発生します。dll.hのコードは

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
#define DLLIMPORT __declspec (dllexport)
#else 
#define DLLIMPORT __declspec (dllimport)
#endif 


class DLLIMPORT sum
{
  public:
    sum();
    void input();
    void add();
    void display();
    virtual ~sum(void);

  private:
          int x,y,res;

};


#endif 

and that of dllmain.cpp is
#include<iostream>
#include "dll.h"
#include <windows.h>
sum::sum()
{
 x=y=res=0;
}


sum::~sum()
{
}
void sum::input()
{
     std::cout<<"Enter two numbers ";
     std::cin>>x>>y;
}
void sum::add()
{
     res=x+y;
}
void sum::display()
{
     std::cout<<"The application in running under a dll file"<<std::endl;
     std::cout<<"The sum is "<<res<<std::endl;
}              

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

ホストアプリケーション(sample.cpp)のコードは

#include<iostream>
#include "dll.h"
using namespace std;
int main()
{
    sum s;
    s.input();
    s.add();
    s.display();
    system("pause");
    return 0;
}    

しかし、次のようなリンカーエラーが発生します。

  [Linker error] undefined reference to `_imp___ZN3sumC1Ev@4' 
  [Linker error] undefined reference to `_imp___ZN3sum5inputEv@4' 
  [Linker error] undefined reference to `_imp___ZN3sum3addEv@4' 
  [Linker error] undefined reference to `_imp___ZN3sum7displayEv@4' 
  [Linker error] undefined reference to `_imp___ZN3sum7displayEv@4' 
  [Linker error] undefined reference to `_imp___ZN3sum7displayEv@4' 
  [Linker error] undefined reference to `_imp___ZN3sum7displayEv@4' 

どうしたらいいのかわからない。dllプログラミングを始めたばかりですが、これに固執しています。誰かが私を助けてくれますか?

4

2 に答える 2

0

あなたのDLLIMPORTシンボルは、 is 'dの__declspec(dllexport)場合に展開されます。BUILDING_DLL#define

したがって、DLL 実装ファイル ( )dllmain.cppでは、.#define BUILDING_DLL #include "dll.h"

于 2012-11-04T11:02:59.320 に答える
0

DLLIMPORT次のように定義しました。

#if BUILDING_DLL
#define DLLIMPORT __declspec (dllexport)
#else
#define DLLIMPORT __declspec (dllimport)
#endif

BUILDING_DLLしかし、以下を含める前に、dll ソース ファイルで定義するのを忘れていますdll.h

#define BUILDING_DLL
#include "dll.h"

:次を使用する必要があります:

#ifdef BUILDING_DLL

それ以外の

#if BUILDING_DLL

最初のものはより自己文書化されているためです。

于 2012-11-04T11:04:46.680 に答える