=?ISO-8859-2?Q?codeblock_co_robi=EA_=BCle=3F__shared_dll?=
cze=B6=E6, dopiero si=EA ucz=EA i chcia=B3bym pozna=E6 dll, mam taki kod=
DLL.dll:
headers:
AFYA_PRODUKT.h:
------------------------------
#ifndef AFYA_PRODUKT_H
#define AFYA_PRODUKT_H
#if OS==1 /* Linux */
#include <dlfcn.h>
#define HINSTANCE void *
#define SHARED_EXPORT extern "C"
#define LOAD_LIB(name) dlopen(name, RTLD_LAZY)
#define LOAD_SYM(lib,name) dlsym(lib,name)
#elif OS==2 /* Windows */
#include <windows.h>
# define SHARED_EXPORT __declspec (dllexport)
#define LOAD_LIB(name) LoadLibrary(name)
#define LOAD_SYM(lib,name) GetProcAddress(lib,name)
#else
#error OS: 1 (Linux) or 2 (Windows)
#endif
extern "C"
{
class SHARED_EXPORT AFYA_PRODUKT
{
public:
AFYA_PRODUKT();
virtual ~AFYA_PRODUKT();
void testT(int t );
};
SHARED_EXPORT AFYA_PRODUKT* CK();
};
#endif // AFYA_PRODUKT_H
--------------------
AFYA_PRODUKT.cpp
--------------------
#include "AFYA_PRODUKT.h"
#include <iostream>
extern "C"
{
SHARED_EXPORT AFYA_PRODUKT::AFYA_PRODUKT()
{
std::cout<<"new AFYA";
}
SHARED_EXPORT AFYA_PRODUKT::~AFYA_PRODUKT()
{
std::cout<<"del AFYA";
}
void SHARED_EXPORT AFYA_PRODUKT::testT(int t)
{
std::cout<<t;
}
AFYA_PRODUKT* SHARED_EXPORT CK()
{
return new AFYA_PRODUKT();
}
}
kt=F3ry kompiluje si=EA pi=EAknie z opcj=B1 -DOS=2
oraz plik main. cpp
#if OS==1 /* Linux */
#include <dlfcn.h>
#define HINSTANCE void *
#define SHARED_EXPORT extern "C"
#define LOAD_LIB(name) dlopen(name, RTLD_LAZY)
#define LOAD_SYM(lib,name) dlsym(lib,name)
#elif OS==2 /* Windows */
#include <windows.h>
#define SHARED_EXPORT __declspec(dllexport)
#define LOAD_LIB(name) LoadLibrary(name)
#define LOAD_SYM(lib,name) GetProcAddress(lib,name)
#else
#error OS: 1 (Linux) or 2 (Windows)
#endif
#include <iostream>
#include ".....\cpp\afya_produkt\include\AFYA_PRODUKT.h"
using namespace std;
int main()
{
HINSTANCE hDll;
hDll = LOAD_LIB("libafya_produkt");
typedef AFYA_PRODUKT*( *pA)();
pA Fx= reinterpret_cast<pA> (LOAD_SYM(hDll, "CK"));
AFYA_PRODUKT* PR = Fx();
int i=7;
// PR->testT(i); tutaj jest problem, o czym nizej
delete PR;
return 0;
}
kiedy udune komentarz kompilator wywala mu, ze brak odwolania do produkt_a=
fya::testT(int)
jak go pozostawi=EA, to jest ok i widz=EA wynik funkcji konstr/destr uktor=
a
kiedy odkomentuj=EA i w procect build-> LINKER zlinkuje (ale chyba? staty=
cznie bibliotek=EA afya-produkt.a) te=BF jest ok... co robi=EA niew=B3a=B6=
ciwe? bardzo prosz=EA o pomoc