Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

請教如何更smart地切換DLL ex/im port定義

請教一下

我做了DLL

_declspec(dllexport) Function(int A);

如果我想從另一支獨立程式使用此動態函式庫

我就要

#pragma comment(lib,"xxxx.lib")

並加入告知編輯器

_declspec(dllimport) Function(int A);

所以我要手動把.h copy一份過來 並把dllexport變成dllimport

請教 如果我要使用#ifndef 更簡單的做法 要怎使用呢

我於網路上有看到範例 但是是針對C++ Builder

#ifdef __DLL__

#define DLL_MODE _declspec(dllexport)

#else

#define DLL_MODE _declspec(dllimport)

#endif

DLL_MODE Function(int A);

我知道的是

因為C Builder於編輯dll專案時 makefile會自動加入-WD

即是定義__DLL__的意思

那麼我想於VISUAL C++6.0上用

請問 關鍵字也是一樣嗎???!!

謝謝

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    #ifdef _USRDLL

    #define MY_DLL_API __declspec(dllexport)

    #else

    #define MY_DLL_API __declspec(dllimport)

    #endif

    MY_DLL_API int DllFunction(void);

    通常 你開 vc6 的 dll project

    vc6 都會幫你 define _USRDLL

    不過若是你想在 二個dll 裡呼叫第一個dll

    此法就不適用了

    此時你可以自行在第一個dll裡

    include Dll head file (假設是my_dll.h) 之前

    先 define 一個自己定義的 dll 的特別 define

    例如

    #define __MY_XXX_DLL__

    #include "my_dll.h"

    然後在 my_dll.h 裡做如下宣告

    #ifdef __MY_XXX_DLL__

    #define MY_DLL_API __declspec(dllexport)

    #else

    #define MY_DLL_API __declspec(dllimport)

    #endif

    MY_DLL_API int DllFunction(void);

Still have questions? Get your answers by asking now.