![]() |
GetProcAddres mit c++ ?!
soda, wenn ein C compiler das sieht:
Code:
dann ist alles so wie es sein sollte....es wird kompiliert.
#include <windows.h>
void (WINAPI * glMyBegin)( void ); int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HINSTANCE myDll = NULL; myDll = LoadLibrary( "OpenGl32.dll"); if (!myDll) return 0; glMyBegin = NULL; glMyBegin = GetProcAddress( myDll, "glBegin" ); if (glMyBegin == NULL) // oder (!glMyBegin) MessageBox(NULL, "Failed to load function.","Error", 0); else MessageBox(NULL, "Function loaded.","Ok", 0); FreeLibrary( myDll ); return 0; } Ein C++ compiler sagt dazu aber : Zitat:
EDIT: Dabei ist folgende Zeile gemeint :
Code:
glMyBegin = GetProcAddress( myDll, "glBegin" );
|
Re: GetProcAddres mit c++ ?!
Probiers mal mit nem cast nach void:
Code:
ciao, Philipp
glMyBegin = (void) GetProcAddress( myDll, "glBegin" );
|
Re: GetProcAddres mit c++ ?!
Ein cast nach void ist ziemlich sinnlos (*).
GetProcAddress gibt einen allgemeinen Funktionstypen zurück, den du auf den entsprechenden Typen casten musst, also z.B.
Code:
Wobei das "void (WINAPI *)( void )" genau der Definition von "glMyBegin" entspricht.
glMyBegin = (void (WINAPI *)( void )) GetProcAddress( myDll, "glBegin" );
//Nachtrag: (*) ein cast nach "(void *)" hätte klappen können. |
Re: GetProcAddres mit c++ ?!
@c113plpbr: So geht das leider nicht.
@Flocke: Leider hast du recht -> (void (WINAPI *)( void )) :roll: Ich habe es schon so gelöst, habe aber gehoft dass es einfacher geht...
Code:
(void*) geht nicht, in C schon aber damit bekommt man lediglich eine Warnung weniger.
typedef void (WINAPI * glBegin_t)( void );
//.. glMyBegin = (glBegin_t)GetProcAddress( myDll, "glBegin" ); |
Re: GetProcAddres mit c++ ?!
Zitat:
Code:
glBegin_t glMyBegin;
|
Re: GetProcAddres mit c++ ?!
Ich habe es schon so gemach, nur nicht gepostet... ;)
Ich habe das Problem in zwischen gelöst. Alle GetProcAdress Aufrufe sind in einer *.c Datei, im entsprechenen Header habe ich folgendes:
Code:
#ifdef __cplusplus
extern "C" { #endif // Deklarationen #ifdef __cplusplus } #endif |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz