Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

FUnckje w DLL

Ostatnio zmodyfikowano 2014-11-13 18:24
Autor Wiadomość
Nexicoll
Temat założony przez niniejszego użytkownika
FUnckje w DLL
» 2014-11-13 16:39:53
Mam tak oto zadeklarowaną funckję w dll'ce

bool DLL_EXPORT CreateFolder(LPCSTR name = "bez nazwy")
{
   CreateDirectory(name, NULL);
   return true;
}
i w pliku nagłówkowym

bool DLL_EXPORT CreateFolder(LPCSTR name);
Chcąc zrobić tak

FARPROC CreateFolder  =  GetProcAddress(hDll, "CreateFolder");
 funckja da się wywołać, ale na jaki sposób bym nie próbował to przy próbie dania jej argumentu (LPCSTR name) za każdym razem wywala mi błąd że funkcja posiada zbyt dużą ilość argumentów :(

(Code::Blocks)
P-120514
Monika90
» 2014-11-13 17:40:21
FARPROC to wskaźnik do funkcji nie przyjmującej żadnych argumentów, wartość zwróconą przez GetProcAddress należy rzutować na właściwy typ.

C/C++
const auto CreateFolder = reinterpret_cast < bool( * )( const char * ) >( GetProcAddress( hDll, "CreateFolder" ) );
P-120516
Nexicoll
Temat założony przez niniejszego użytkownika
» 2014-11-13 18:07:12
"auto" changes meaning in C++11 -_-

btw. deklarując np.   
bool CreateFolder = (reinterpret_cast < bool( * )( const char * ) > (GetProcAddress(hDll, "CreateFolder")));
 lub  
  bool CreateFolder =  (GetProcAddress(hDll, "CreateFolder");
 po późniejszym użycia otrzymuję błąd, że CreateFolder nie może być użyte jako funkcja :(

P-120521
Monika90
» 2014-11-13 18:18:24
Co ty za kompilatora używasz że nie działa w nim auto? Może zapomniałeś użyć -std=c++11

Jeżeli naprawdę masz tak przestarzały kompilator to zrób tak
C/C++
typedef bool( * PCreateFolder )( const char * );
const PCreateFolder CreateFolder = reinterpret_cast < PCreateFolder >( GetProcAddress( hDll, "CreateFolder" ) );



i w pliku nagłówkowym

bool DLL_EXPORT CreateFolder(LPCSTR name);
Po co to w pliku nagłówkowym, jeżeli ładujesz funkcję za pomocą GetProcAddress?
P-120523
Nexicoll
Temat założony przez niniejszego użytkownika
» 2014-11-13 18:24:28
Pięknie działa. Dziękuję :)
P-120525
« 1 »
  Strona 1 z 1