2012-02-10 2 views
2

У меня есть два проекта в Visual Studio 2010. Один из них - простой проект (win32) .exe, а другой - проект DLL.Использование функций класса из dll

В DLL-проекте, который я создал, просто есть простой класс, в котором есть только один метод. Я хочу получить доступ к этому классу и методу из своего приложения EXE. Но я хотел бы получить доступ к классу, как если бы он был частью проекта EXE это сам, как:

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

Есть ли способ сделать это? Как освобождение файлов заголовков DLL и добавление ссылки на DLL где-то в проекте EXE или что-то ... ??

+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, вам необходимо правильно использовать _declspec(dllimport) и _declspec(dllexport) в классе, который вы хотите загрузить из DLL.

Используйте dllexport при компиляции DLL и dllimport при компиляции исполняемого файла, который использует DLL.

--- 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

Вы включаете заголовок и добавляете в дополнительные библиотеки include .lib, сгенерированный проектом, который также генерирует .dll.

Смежные вопросы