Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
21.01.2004, 16:06
EyDu



Hallo,
ich habe ein selsames Problem mit der Funktion GetEntityAPI. Ich probiere gerade eine neue mp.dll zu erstellen, die, wer hätte es gedacht, später als Mod arbeiten soll. Jedoch wird die oben gennannte funktion (GetEntityAPI) einfach nicht von Half-Life aufgerufen. Die DllMain(...) und GiveFnptrsToDll(...) funktionieren allerdings schon. Ich habe die komplette Dll (ist ja noch nicht so viel) als ein neues Projekt erstellt und nicht das Multiplayer SDK benutz (mit dem funktioniert GetEntityAPI hatte ich da natürlich noch keine Probleme).
Ich poste die Deklarationen meiner Funktionen einfach mal mit, weil dort bestimmt der Fehler liegt. Ich kann ihn jedoch einfach nicht finden. Wäre super wenn mir jemand helfen könnte, komme nämlich einfach nicht weiter und fange sonst an zu weinen...

extern "C" void DLLEXPORT GiveFnptrsToDll(void *pFuncs, int *piGlobals);
extern "C" int DLLEXPORT GetEntityAPI(void *pFuncs, int iInterfaceVersion);

Folgende Funktionen werden übrigens auch nicht aufgerufen:
extern "C" int DLLEXPORT GetEntityAPI2(void *pFuncs, int *piInterfaceVersion);
extern "C" int DLLEXPORT GetNewDLLFunctions(void *pFuncs, int *piInterfaceVersion);

--

zum Seitenanfang zum Seitenende Profil || Suche
001
21.01.2004, 16:14
K-Putt



Warum machst du es nicht so wie im HL SDK?

Quellcode:[b]cbase.h[/b]
extern "C" EXPORT int GetEntityAPI( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion );
extern "C" EXPORT int GetEntityAPI2( DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion );

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
002
21.01.2004, 18:59
EyDu



Ersmal danke für die schnelle Antwort, hat ja gerade mal acht Minuten gedauert. Leider hat der Vorschlag nicht viel geholfen. Es ist immer noch genau das gleich Problem wie am Anfang. Das soll mal jemand verstehen.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
21.01.2004, 20:12
Rockefeller



Hmm. Könnte es sein, dass HL beim Laden der DLL erkennt, dass es sich nicht um eine gültige MOD-DLL handelt, und daraufhin das Laden abbricht?

--

zum Seitenanfang zum Seitenende Profil || Suche
004
21.01.2004, 20:51
K-Putt



Eydu
Hast du die Funktion GetEntityAPI( ) auch in deiner dll implementiert?
Im HL Sdk sieht die nämlich wie folgt aus:

Quellcode:#ifndef _WIN32
extern "C" {
#endif
int GetEntityAPI( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion )
{
    if ( !pFunctionTable || interfaceVersion != INTERFACE_VERSION )
    {
        return FALSE;
    }
    
    memcpy( pFunctionTable, &gFunctionTable, sizeof( DLL_FUNCTIONS ) );
    return TRUE;
}

.
.
.

#ifndef _WIN32
}
#endif
Ich denke mal das hat was mit dieser interfaceversion zu tun, die da verglichen wird.
Die wird in deiner DLL nicht deklariert, bzw. nicht die selbe sein.

Quellcode:#define INTERFACE_VERSION       001
So ist es im HL SDK gemacht

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database


Dieser Beitrag wurde am 21.01.2004 um 20:52 von K-Putt bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
21.01.2004, 21:34
EyDu



In der GetEntityAPI dürfe eigentlich alles richtig sein, sie beseteht lediglich aus diesem Code:

extern "C" int GetEntityAPI(DLL_FUNCTIONS *pFuncs, int iInterfaceVersion)
{
fprintf(g_pLog, "GetEntityAPI() done\n");

return TRUE;
}

Das Problem ist, dass kein Sprung in die Funktion statt findet. Die Log-Datei funktioniert auf jeden Fall, da sie in GiveFnptrsToDll eine Ausgabe hat und dann nochmals bei Freigeben der DLL (DLL_PROCESS_DETACH). Eine MessageBox bringt leider auch keine Ergebnisse.

--

zum Seitenanfang zum Seitenende Profil || Suche