Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
27.01.2002, 14:49
apfelkorn



ich habe die wurzel allen übels gefunden: windows und die msdnlibrary!

ich versuche die ganze zeit eine dll einzuladen. Alles schön und gut das laden der dll klappt auch, er hat eine Adresse dafür. Wenn ich aber versuche eine Prozeduradresse zu bekommen, gibt er mir absolut nichts, NULL. Okay, hab ich mir gedacht, vielleicht liegts an mir... Ich benutz das Beispiel aus der MSDN-Library mit myputs und so weiter und was passiert: nichts... genau das selbe problem... einfach keine prozedur-adresse ich hab bis gerade daran rumgearbeitet, und jetzt bin ich nahe an der absoluten verzweiflung. Was mache ich die ganze zeit falsch??? andere menschen schaffen es doch, bibliotheken mit einzubeziehen und funktionen daraus... :( *schüff*

[edit>>]
achja, ein bissl code:
Quellcode:
    HINSTANCE hinstLib;
    GetRenderAPI_t ProcAdd;

    hinstLib = LoadLibrary("oglrender");

if (hinstLib == NULL)
return FALSE;

    ProcAdd = (GetRenderAPI_t) GetProcAddress(hinstLib, "GetRenderAPI");

    if (ProcAdd == NULL)
return FALSE;

    FreeLibrary(hinstLib);

return TRUE;

und für die dll:

render_export_t GetRenderAPI ( render_import_t ri )
{
render_export_t re;
/*
re.render_api_version = 1;
re.Init = NULL;
re.Shutdown = NULL;

cb = ri; // Looks funny, but it isnt
return re; */

return re;
}

und die gemeinsame datei:

#ifndef H_RENDER
#define H_RENDER

typedef struct
{
int render_api_version;
void (*Init) ( HINSTANCE hInstance, HWND hWnd );
void (*Shutdown) ( void );
} render_export_t;

typedef struct
{
void (*Con_Print) ( const char* text, ... );
} render_import_t;

typedef render_export_t (*GetRenderAPI_t) (render_import_t);

#endif // H_RENDER

--


Dieser Beitrag wurde am 27.01.2002 um 14:53 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
28.01.2002, 14:21
Prefect



Tja, worüber sich so ziemlich alles ausschweigt: Du mußt die zu exportierenden Funktionen (in der DLL) entweder mit einem Modifier versehen (dllexport oder so), oder du schreibst eine kleine .def-Datei, in der die zu exportierenden Funktionen aufgelistet sind. Das sieht dann so aus:

Quellcode:
LIBRARY oglrender
EXPORTS
        GetRenderAPI                              @1

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
002
28.01.2002, 20:08
apfelkorn



mh... nun gut, also das mit dem ___declspec(export) hab ich auf jeden fall versucht, aber es wär sehr freundlich, wenn du mir erklären könntest, wie ich dann die .def gebrauche...

--

zum Seitenanfang zum Seitenende Profil || Suche
003
29.01.2002, 15:38
Prefect



Gar nicht... du fügst die einfach in das gleiche Verzeichnis wie die .dsp-Datei ein. Bei mir hat das zumindest funktioniert... (und neue Funktionen wirst du ja wohl selber hinzufügen können). Die Datei heißt halt genauso wie das Projekt, also wenn das Projekt oglrender.dsp heißt, dann heißt die .def oglrender.def.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
29.01.2002, 15:53
CY4N1D3



die tatsache das eine .h datei zu einer gleichnamigen .cpp datei gehört finde ich sehr unprofessionell gelöst... :( ich habe mich schon tot gesucht wo definiert ist welche .h datei zu welcher cpp datei gehört >:(

naja... manchmal ist eben nicht alles so wie man es möchte... jetzt hab ich das ja raus. wenn man c erstmal raus hat macht es richtig spass.

--

ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln.


Dieser Beitrag wurde am 29.01.2002 um 15:54 von CY4N1D3 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
29.01.2002, 18:01
apfelkorn



mh.. ich probiers mal...

super, danke prefi... er stürzt zumindest schonmal nicht ab, und das soll was heißen :)

--


Dieser Beitrag wurde am 29.01.2002 um 18:10 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
29.01.2002, 18:13
Another1



da apfel nen beispiel, falls es immernochnitklapptoso

die dll:
Quellcode:
int __declspec(dllexport) DLLFunc_GetVersion(void)
{
   return 0x000100;
}

kompilieren, und der teil wäre fertig, so und nu das benutzende prog:

Quellcode:

...
HINSTANCE hinstDll;

hinstDll = LoadLibrary("mydll");

if (hinstDll == NULL)
return FALSE;

int (*Imported_DLLFunc_GetVersion)(void);
Imported_DLLFunc_GetVersion = (int(*)(void))GetProcAddress(hinstDll , "DLLFunc_GetVersion");

if (Imported_DLLFunc_GetVersion == NULL)
return FALSE;

printf("Dll version:%d\n",Imported_DLLFunc_GetVersion());

FreeLibrary(hinstDll );
...

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
007
30.01.2002, 13:48
apfelkorn



ne, danke... die sache mit der .def funktioniert schon, trotzdem danke :)

--

zum Seitenanfang zum Seitenende Profil || Suche