Klasy w DLL
Ostatnio zmodyfikowano 2016-02-21 17:10
marcolo2307 Temat założony przez niniejszego użytkownika |
Klasy w DLL » 2016-02-21 16:55:24 Cześć! Próbuję stworzyć sobie klasę w DLL'ce. Udało mi się załadować bibliotekę i stworzyć obiekt. Nie mogę wywołać metody. myDll.h #ifndef __MAIN_H__ #define __MAIN_H__
#include <windows.h> #include <iostream>
#ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif
extern "C" { class DLL_EXPORT MyClass { private: public: MyClass(); ~MyClass(); void method(); }; MyClass * DLL_EXPORT CreateMyClass(); } #endif
Plik ź r ó d ł owy DLL [ cpp ] # include "myDll.h"
MyClass::MyClass() { std::cout << "MyClass::MyClass()\n"; } MyClass::~MyClass() { std::cout << "MyClass::~MyClass\n"; } void MyClass::method() { std::cout << "MyClass::method()\n"; } MyClass * CreateMyClass() { return new MyClass; } main.cpp w osobnym projekcie #include <windows.h> #include "myDll.h"
typedef MyClass *( * CMC )();
CMC CreateMyClassF;
int main() { DWORD L; char buf[ 1024 ]; HINSTANCE hDll; hDll = LoadLibrary( "Dll" ); if( hDll != NULL ) { std::cout << "Library has been loaded!\n"; CreateMyClassF =( CMC ) GetProcAddress( hDll, "CreateMyClass" ); if( CreateMyClassF != NULL ) { std::cout << "CreateMyClass function is available!\n"; MyClass * Class = CreateMyClassF(); Class->method(); } FreeLibrary( hDll ); } } Błąd to: undefined refence to "_imp___ZN...". czy aby wywoływać metody także muszę tworzyć do nich wskaźniki? W internecie znalazłem informację o tym, że metody powinny być wirtualne, ale to nic nie zmieniło. Widziałem jeszcze metodę w rodzaju korzystania z klasy dziedziczonej bez żadnych zmiennych w środku, ale jeszcze jej nie testowałem i wydaje mi się trochę nieopłacalna. |
|
pekfos |
» 2016-02-21 16:57:18 Musisz ładować DLL dynamicznie? |
|
marcolo2307 Temat założony przez niniejszego użytkownika |
» 2016-02-21 16:58:44 Nie muszę, ale chciałbym. Statycznie wszystko działa bez problemu. |
|
pekfos |
» 2016-02-21 17:08:47 czy aby wywoływać metody także muszę tworzyć do nich wskaźniki? |
Tak. |
|
marcolo2307 Temat założony przez niniejszego użytkownika |
» 2016-02-21 17:10:13 Ok, dzięki. Zamykam. |
|
« 1 » |