Ako exportovat triedu z Dll? A ako ju potom pouzit v inom programe?
Som skusal uz vsetko mozne, ale pre moju neschopnost to stale nejde...
V sucastnosti mam nieco taketo:
Projekt TestClassDll
subor stdafx.h, na konci pridane riadky:
subor TestClassDll.h, pridaval som prve dva odstavce (ale davam ho sem cely)Kód:#define _TESTCLASS_DLLAPI_ #define _TESTCLASS_NOAUTOLIB_
subor TestClass.hKód:// TestClassDll.h : main header file for the TestClassDll DLL // #ifdef _TESTCLASS_DLLAPI_ #define TESTCLASS_DLLAPI __declspec( dllexport ) #else #define TESTCLASS_DLLAPI __declspec( dllexport ) #endif #ifndef _TESTCLASS_NOAUTOLIB_ #ifdef _DEBUG #pragma comment(lib, "TestClassDlld.lib") #else #pragma comment(lib, "TestClassDll.lib") #endif #endif #pragma once #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // main symbols // CTestClassDllApp // See TestClassDll.cpp for the implementation of this class // class CTestClassDllApp : public CWinApp { public: CTestClassDllApp(); // Overrides public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() };
subor TestClass.cppKód:#pragma once #ifdef _TESTCLASS_DLLAPI_ #define TESTCLASS_DLLAPI __declspec( dllexport ) #else #define TESTCLASS_DLLAPI __declspec( dllexport ) #endif //#define MY_EXPORT __declspec( dllexport ) TESTCLASS_DLLAPI int MyFunc(int n); int MyFunc(int n) { return 6; } class TESTCLASS_DLLAPI TestClass { public: TestClass(void); ~TestClass(void); CString GetName(void); CString name; void SetName(CString n); };
--------------Kód:#include "StdAfx.h" #include "testclass.h" TestClass::TestClass(void) : name(_T("")) { name = "TestClass"; } TestClass::~TestClass(void) { } CString TestClass::GetName(void) { return CString(name); } void TestClass::SetName(CString n) { name = n; }
Projekt TestUsingClassDll
subor stdafx.h bez zmeny
subor TestUsingClassDll.cpp
-------------Kód:// TestUsingClassDll.cpp : Defines the entry point for the console application. // #include "stdafx.h" #define MY_IMPORT __declspec( dllimport ) MY_IMPORT int MyFunc(int n); int _tmain(int argc, _TCHAR* argv[]) { MY_IMPORT class TestClass {} *TstClss; // TstClss = new TestClass(); // komentar 1 // TstClss.SetName("nazov"); // komentar 2 printf("%d", MyFunc(17)); getchar(); return MyFunc(17); }
Pokial zrusim komentovanie komentara 1 (posledny zdrojovy subor) vznikne mi chyba pri linkovani:
Pokial zrusim * pred TstClss (takze to uz nebude smernik), a zrusim komentovanie komentara 2, vznikne nasledujuca chyba:Kód:TestUsingClassDll error LNK2001: unresolved external symbol "__declspec(dllimport) class TestClass * TstClss" (__imp_?TstClss@@3PAVTestClass@@A) TestUsingClassDll fatal error LNK1120: 1 unresolved externals
Najvacsia sranda je, ze pokial obidva komentare necham, skompiluje sa to i zlinkuje, a bez problemov to vypise "6", na co pouzije funkciu z tej Dll.Kód:c:\Documents and Settings\matej.W2003SVR04\My Documents\Visual Studio Projects\TestUsingClassDll\TestUsingClassDll.cpp(15): error C2039: 'SetName' : is not a member of '(int,_TCHAR *[])main::TestClass'
Ak viete co s tym, prosim poradte. Trapim sa s tym uz vyse tyzden a stale neviem z Dll exportovat triedu a pouzit tu triedu v programe ktory by pouzival tu Dll.


 
			
			 
					
						 
					
						 MS VS .Net a Class v Dll
 MS VS .Net a Class v Dll
				 
					
					
					
						 Odpověď s citací
  Odpověď s citací Původně odeslal Lunatic
 Původně odeslal Lunatic
					
				