[BCB] Dynamiczne ładowanie DLL

0

plik.h

typedef void (*RYSUJPROC)();

class TKlasa
{
private:
  HINSTANCE hDll;
  RYSUJPROC pluginrysuj;
public:
...
};

plik.cpp (w jakiejs funkcji z klasy TKlasa)

  hDll = LoadLibrary(nazwa);
  if(hDll)
   {
    plugininit = (INITPROC)GetProcAddress(hDll, "Rysuj");
    if (plugininit)
      MessageBoxA(NULL,"udalo sie wczytac","dll",MB_OK);
    ...

dll.cpp

#include "pluginAPI.h"
// w tym pliku najwazniejsze rzeczy to:
// #define DLLEXPORT __declspec(dllexport)
// #include <vector>
// #include <Graphics.hpp>

extern "C"
{
  DLLEXPORT void Rysuj();
}

void Rysuj()
{
//costam
}

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}

z niewiadomych dla mnie przyczyn to nie działa (wiadomość nie wyświetla się)... gdzie tu jest błąd?

EDIT:
Przed chwilą z ciekawości zajrzałem do tego 7kb-towego dlla i zobaczyłem, że nazwy tych funkcji po eksporcie zaczynają się od "_". Po zmienieniu nazwy przy imporcie zaczęło działać... Dlaczego ten dolnik tam jest? skąd on się wziął?

EDIT:
Dobra, w końcu sobie poradziłem. W opcjach kompilatora jest opcja "Generate underscores" (po cholere ona jest to ja nie wiem). Sorry za spam. Nie kasuje tematu, bo może się kiedyś komu przyda.

0

Popraw nazwę metody, do szukania

...
    plugininit = (INITPROC)GetProcAddress(hDll, "_Rysuj"); // brak podkreślenia na początku
    if (plugininit==NULL) // tu był zły warunek
        MessageBoxA(NULL,"Nie znalezino metody","dll",MB_OK); // opis błędu tu ma być inny!
...
0

nie nie nie. brak podkreślenia na początku - nie powinno być podkreślenie po odznaczeniu w kompilatorze "Generate underscores". warunek był dobry:

    if (plugininit)
      MessageBoxA(NULL,"udalo sie wczytac","dll",MB_OK);

jak uda się wczytać to pokazuje ze sie udalo :)

0

a czemu jest wykomentowana definicja DLLEXPORT?

0

bo jest w pliku naglowkowym... dwukropek tam jest :) z kodem wszystko jest ok juz :) nie szukaj bledow :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1