2012-02-10 15 views
2

Visual Studio 2010には2つのプロジェクトがあります.1つはシンプル(win32).exeプロジェクトで、もう1つはDLLプロジェクトです。DLLからのクラス関数の使用

私が作成したDLLプロジェクトには、ただ1つのメソッドしかない単純なクラスがあります。私はこのクラスとメソッドにEXEアプリケーションからアクセスしたいと思っています。しかし、EXEプロジェクトの一部であるかのようにクラスにアクセスしたいと思います。

CTest test = new CTest; 
test->TestMethod (); 

これを行う方法はありますか? DLLのヘッダーファイルを解放し、EXEプロジェクトなどのどこかのDLLへの参照を追加するのと同じように... ??

+0

これは役立ちます:[標準テンプレートライブラリ(STL)クラスとSTLオブジェクトであるデータメンバを含むクラスのインスタンス化をエクスポートする方法](http://support.microsoft.com/kb/168958) – lsalamon

+0

[.Libファイルをリンカ入力として参照](http://msdn.microsoft.com/en-us/library/ba1z7822.aspx) - .dllプロジェクトは.libファイルを生成し、.exeプロジェクトはそれへのリンク。 – ildjarn

答えて

4

@Luchian Grigoreさんの助言に加えて、DLLからロードするクラスで_declspec(dllimport)_declspec(dllexport)を正しく使用する必要があります。

DLLをコンパイルするときはdllexportを使用し、DLLを使用する実行可能ファイルをコンパイルするときはdllimportを使用します。

--- --- CTest.h

#ifdef CTEST_EXPORT // You are compiling the DLL 
#define CTEST_DLL_EXPORT _declspec(dllexport) 
#else 
#define CTEST_DLL_EXPORT _declspec(dllimport) 
#endif 

class CTEST_DLL_EXPORT CTest 
{ 
public: 
    bool TestMethod(); 
}; 

--- --- CTest.cpp

#define CTEST_EXPORT 
bool CTest::TestMethod() 
{ 
    return(true); // Success? 
} 

--- --- main.cppに

#include <iostream.h> // Whatever cin/cout are declared in... 
#include "CTest.h" 

int main() 
{ 
    CTest ct; 

    if(ct.TestMethod()) 
    { 
     cout << "Success" << endl; 
    } 
    else 
    { 
     cout << "Failure" << endl; 
    } 
    return(0); 
} 
1

.dllも生成するプロジェクトによって生成された.libというヘッダをインクルードして追加インクルードライブラリに追加します。

関連する問題