locally defined symbol imported in function [email protected]

Odpowiedz Nowy wątek
2015-02-24 16:37
0

Cześć, mam jakieś dziwne ostrzeżenia, których chciałbym się pozbyć.
Tak, jak w temacie. Oczywiście sprawdzałem w necie, czytałem, próbowałem itd. Ale wg mnie wszystko jest tu ok.

Sprawa wygląda tak, że tworzę sobie liba. W tym samym solution, tworzę nowy projekt - exe, który używa tego liba.

Całość wygląda mniej więcej tak:
========= lib ==============

class DLL_API NControl : public NObject
{
  public:
    void SetLeft(const int left);
}

Makro DLL_API jest zdefiniowane tak:

#ifdef DLL_EXPORT
    #define DLL_API __declspec(dllexport)
#else
    #define DLL_API __declspec(dllimport)
#endif

W ustawieniach projektu lib'a mam oczywiście zdefiniowane DLL_EXPORT

Następnie w exe w funkcji WinMain używam metody SetLeft:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow)
{   
    MainFormPtr mainForm;
    mainForm.reset(new MainForm);
    mainForm->Create();
    mainForm->Show();
        mainForm->SetLeft(100);

    //...
}

MainFormPtr to jest smart pointer do klasy dziedziczącej po NControl.
Dlaczego dostaję takie ostrzeżenia?

Pozostało 580 znaków

2015-02-25 09:42
0

Sprawdź, czy biblioteka i aplikacja mają tak samo ustawioną opcję Runtime Library.

Pozostało 580 znaków

2015-02-26 20:09
0

Mają tak samo.

Pozostało 580 znaków

2015-02-26 20:50
2015-02-28 15:10
0

Czytałem to. Ale jak to się odnosi do kodu, który podałem?

Pozostało 580 znaków

2015-03-01 09:21
0

Wywal __declspec(dllimport).

Pozostało 580 znaków

2015-03-01 12:46
0

Ale ja to mam w makrze. W bibliotece mam zdefiniowany export, a w aplikacji import. To mam wywalić ten import w ogóle? Będzie to działało poprawnie?

Pozostało 580 znaków

2015-03-01 12:58
0

I dobrze, że masz to w makrze. Najpierw sprawdź, czy usunięcie dllimport coś zmienia w temacie. Później, jeśli działa, możesz dostosować to swoje makro tak, żeby usuwało tylko dla kompilatora VC.

Pozostało 580 znaków

2015-03-01 14:32

W ustawieniach projektu lib'a mam oczywiście zdefiniowane DLL_EXPORT

dllimport i dllexport mają zastosowanie, jak nazwa wskazuje, w bibliotekach dynamicznych .dll. jeśli piszesz statyczną bibliotekę .lib to się ich nie używa.

w bibliotece typu .DLL powinieneś mieć zdefiniowane DLL_EXPORT podczas kompilacji dll-ki, i niezdefiniowane podczas kompilacji programu używającego tejże dll-ki.

edytowany 1x, ostatnio: Azarien, 2015-03-01 14:33

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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