2009-10-16 12 views
6

Konwertuję mój projekt, aby korzystać z bibliotek DLL i próbuję rozdzielić moją klasę Singleton, aby uniknąć używania szablonów.Punkt wejścia procedury nie może znajdować się w bibliotece dołączanej dynamicznie Core.dll

Moja klasa, LudoMemory, pierwotnie odziedziczona po Singleton. Próbuję nadać mu funkcje niszczenia i tworzenia się teraz, a mój główny silnik nie powinien polegać na Singleton.

Napisałem prosty sposób zniszczyć jak takie:

LudoMemory *memory_Singleton = NULL; 

    void LudoMemory::Destroy() 
    { 
     LUDO_SAFE_DELETE(m_Singleton) 
    } 

i po uruchomieniu programu (żadnych błędów kompilatora) I odbieranie błąd:

The procedure entry point [email protected]@@SAXXZ could not be located in the dynamic link library LudoCore.dll

LudoCore jest projekt, który LudoMemory należy do. Dlaczego to się dzieje? Jak mogę to rozwiązać?

Odpowiedz

8

Nie masz wielu wersji Ludocore.dll w systemie, prawda? Błędy punktów wejścia procedury zwykle oznaczają: skompilowałeś swój projekt przeciwko ludocore.lib wersji x, a podczas działania programu używa on wersji ludocore.dll y, a wersja y nie definiuje LudoMemory :: Destroy().

2

Odpowiedź Jacoba na wiele wersji DLL wydaje się prawdopodobna.

Ponadto w przypadku niektórych systemów kompilacji należy jawnie określić, które funkcje zostaną wyeksportowane do biblioteki DLL.

Zbadaj swoje środowisko kompilacji i zobacz, czy musisz podać listę metod do wyeksportowania jako punkt wejścia.

0

W środowisku Visual Studio kompilacji, również można spróbować wyłączając odniesień w Linker ustawienia optymalizacji [Nie (/ opt: NOREF)]

Powiązane problemy