Borland C++ i utworzenie biblioteki .dll

0

Dlaczego kod biblioteki uzyskany z Borlanda kompletnie
olewa to co się zamieści w punkcie wejscia do Biblioteki .
Kompilowane Borland 5.01 .

W BCB nie sprawdzałem , bo nie zawiera (mój) dll wizard , a
zależy mi na tym aby wejście było w DllMain ,nie w jakichś
tam DLLEntryPoint czy innym g...

#ifndef __TESTBIB_H
#define __TESTBIB_H
//   Funkcje zawatre w bibliotece

#ifdef __cplusplus
extern "C"{
#endif

int CALLBACK _export  Funkcja_test_dll(void) ;

#ifdef __cplusplus
       }
#endif

#endif 

#include <windows.h>

#include "testbib.h"

char* nap_1 = " Modyfikacja w DLL_PROCESS_ATTACH " ;
char* nap_2 = " Fun " ;


int APIENTRY DllMain(HINSTANCE hInstance ,DWORD fdwReason ,PVOID pvReserved)
{


    switch (fdwReason)
        {
                case DLL_PROCESS_ATTACH:

       nap_2 = nap_1 ;

         break ;
                case DLL_THREAD_ATTACH:
         break ;
                case DLL_THREAD_DETACH:
                case DLL_PROCESS_DETACH:
                        break;
    }
    return TRUE;

}

int CALLBACK _export  Funkcja_test_dll(void)
{

       MessageBox(NULL,"Funkcja_test_dll",nap_2,MB_OK) ;
       return 1 ;
}
#include <windows.h>
#include "testbib.h"


int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPreninstance ,
                      PSTR szCmdDupa , int iCmdShow )
{

           Funkcja_test_dll() ;

             return 0 ;
}

Tak utworzona biblioteka pozwala na wywołanie Funkcji -> Funkcja_test_dll
natomiast kod z DllMain nie jest wykonywany .Nawet przy dynamicznym ładowaniu
takiej .dll .

Biblioteka z MASM32 natomiast gładko przechodzi przez to .

Ta sama .dll kompilowana ( po zmianie składni ) w Dev-C++ zachowuje się tak
jak powinna .Czyli po wywołaniu Funkcja_test_dll() jest wyświetlany MsBox
"Modyfikacja w DLL_PROCESS_ATTACH"

0

Żeby biblioteka w Borlandzie używała DllMain zamiast DLLEntryPoint, musi mieć ustawioną opcję VC++ Style DLL Ale ja zawsze tę opcję ustawiam za pomocą DLL Wizarda właśnie (którego ty, jak piszesz, nie masz) i nie wiem, jak tę opcję włączyć z poziomu kodu źródłowego. Nie zastanawiałem się nigdy nad tym. Sorr, wskazówkę dałem, rozwiązania nie jestem w stanie.

//Dopisano:
Już wiem jak to zmienić. Project | View Source. W trzeciej linii normalnie masz DllEntryPoint. Zamień to na DllMain.

0

Wszystkie powiadomienia i wejscie do biblioteki działa w BCB prawidłowo :

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    switch (reason)
	{
		case DLL_PROCESS_ATTACH:

       nap_2 = nap_1 ;
      ...............

itd .
Problem jest tylko z Borland 5.01 , dziwna sprawa ( to dosyć stary kompilator ) .
Ale tam olać to .
Muszę jednak pozostac przy DllEntryPoint bo kompilator nie chce tego łyknąć ( jeśli
bibliotekę postanowię utworzyć w BCB , a jak nie to zrobię to w Dev-C++) .

                 Dzięki za odpowiedz .

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