Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.07.2003, 10:57

DLLs mit Parameter

high @ll

also, ich hab ne dll, die exportiert 2 funktionen: void Test1(void) und void Test2(int i).
Test1() funktioniert problemlos, wenn ich in einer anderen anwendung mir den pointer per GetProcAddress() geben lasse, bei Test2() stürtzt er immer ab. das ist bei allen funktionen, die einen parameter verlangen so.

ich hoffe ihr könnt mir helfen, neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

2

08.07.2003, 22:25

hmm!

antwortet!

war das nicht verständlich?
soll ich code posten?

sagt doch was!

neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

08.07.2003, 22:39

Ja, poste bitte mal Code!

4

08.07.2003, 22:57

also, die dll:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
extern "C"
{
    TESTCLIENTPLUGIN_API void Test1(int *i)
    {
        return;
    }

    TESTCLIENTPLUGIN_API void Test2(void)
    {
        return;
    }
}


so, dass wird auch alles brav exportiert etc

wenn ich jetzt im hauptprogramm das so aufrufe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nShowCmd)
{
    HMODULE hDll = LoadLibrary("TestPlugin.dll");
    if (!hDll)
        return -1;

    void (__stdcall *Testfunktion1)(int *);
    void (__stdcall *Testfunktion2)(void);

    Testfunktion1 = (void (__stdcall *)(int *))GetProcAddress(hDll, "Test1");
    Testfunktion2 = (void (__stdcall *)(void))GetProcAddress(hDll, "Test2");

    Testfunktion2(); // Das hier funzt einwandfrei

    int i=4;
    Testfunktion1(&i); // Absturz des Programms :(


thx, neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

08.07.2003, 22:59

Funktioniert es denn bei meinem Beispielprogramm aus Kapitel 9? Die Funktion dort erwartet ja auch Parameter.

6

09.07.2003, 00:48

Mal ne andere Frage. Bist du dir ganz sicher das die Funktionen in der DLL auch die __stdcall Aufruf Methode benutzen? Soweit ich weis ist der Standard nämlich __cdecl. Das könnte zu unerwartete Nebeneffekte führen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

09.07.2003, 11:13

ups, thx ;)

edit: hmm, klappt immer noch nich, die Funktionen kriegen dann immer wieder so komische namen: _Test@8 etc

außerdem benutzt david das auch mit __cdcl oder so
ich hab auch mal probiert, alle deine (Davids) linker- und compilereinstellungen zu übernehmen, dann geht es aber trotzdem noch nicht :(
stay tight, project universe comes back!
### project earth <> 2004 ###

8

09.07.2003, 12:04

ai, hat sich erledigt :schild:

ich habe FreeLibrary() ein bisschen zu früh aufgerufen ^^
stay tight, project universe comes back!
### project earth <> 2004 ###

Werbeanzeige