Eigene DLL



  • hallo bin gerade deibei mich mit der erstellung von eigenen dll's zu
    beschäftigen und habe dabei leider einige probleme. und zwar kann ich
    nach dem einbinden in meine exe die funktionen der von mir erstellten
    dll nicht verwenden.. hier mal der source:

    //---- DIE DLL
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <windows.h>
    #include <stdio.h>
    
     BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID
    lpvReserved)
    {
             BOOL bResult = TRUE;
    
      // Dispatch this main call based on the reason it was called.
      switch (fwdreason)
      {
            case DLL_PROCESS_ATTACH:
               printf("<DLL> Attached \n");
    
            break;
    
        case DLL_PROCESS_DETACH:
              printf("<DLL> Detached\n");
              break;
    
        default:
          break;
      }
    
      return (bResult);
    
    }
    
    void __declspec(dllexport) __stdcall myfunct(void){
    printf("<DI> TEST");
    
    }
    
    ///--- DIE EXE
    #pragma hdrstop
    #include <windows.h>
    #include <stdio.h>
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
    typedef void (__stdcall *myfunctPtr)(void);
     myfunctPtr myfunct;
    int main(int argc, char* argv[])
    {
    HANDLE hDLL;
    hDLL=LoadLibrary("project1.dll");
    if(!hDLL){
     printf("<EF> Cant Find [myfunction.dll] %08X!\n",GetLastError());
    
    }
    
    myfunct=(myfunctPtr)GetProcAddress(hDLL,"myfunct");
    if(!myfunct){
            printf("<EF> Cant do myfunction [project1.dll] %08X!\n",GetLastError());
           return(FALSE);
     }  else {
     myfunct(); }
     getc(stdin);
            return 0;
    }
    
    /// ************ END EXE
    

    nur springt mir das ding immer auf die fehlermeldung... die DLL wird
    geladen nur die function steht anscheinend nicht zur verfügung,
    irgendwelche ideen?

    ps.: GetLastError gibt 0x0000007F zurück bei der myfunct validierung!
    ja wird mit BC++ Explorer compiliert...



  • Wenn's eine C++-DLL ist, musst du deine exportierten Funktionen in extern "C" einschließen.

    extern "C" {
      //deine Funktionsdeklarationen
    }
    

    Ich glaube es reicht, wenn du das mit den Prototypen machst. Doppelt schadet aber auch nicht.

    Übrigens kannst du dir mit dem Dependency Walker ansehen, welchen Effekt das hat...



  • ja jez funktionierts, danke


Anmelden zum Antworten