AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetProcAddres mit c++ ?!

Ein Thema von sniper_w · begonnen am 28. Okt 2005 · letzter Beitrag vom 28. Okt 2005
Antwort Antwort
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#1

GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 21:27
soda, wenn ein C compiler das sieht:
Code:
#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;
}
dann ist alles so wie es sein sollte....es wird kompiliert.

Ein C++ compiler sagt dazu aber :
Zitat:
error C2440: '=' : cannot convert from 'int (__stdcall *)(void)' to 'void (__stdcall *)(void)'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Was soll ich machen ?

EDIT:
Dabei ist folgende Zeile gemeint :
Code:
glMyBegin = GetProcAddress( myDll, "glBegin" );
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#2

Re: GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 21:42
Probiers mal mit nem cast nach void:
Code:
glMyBegin = (void) GetProcAddress( myDll, "glBegin" );
ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 21:47
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:
glMyBegin = (void (WINAPI *)( void )) GetProcAddress( myDll, "glBegin" );
Wobei das "void (WINAPI *)( void )" genau der Definition von "glMyBegin" entspricht.

//Nachtrag:
(*) ein cast nach "(void *)" hätte klappen können.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 22:04
@c113plpbr: So geht das leider nicht.

@Flocke: Leider hast du recht -> (void (WINAPI *)( void ))
Ich habe es schon so gelöst, habe aber gehoft dass es einfacher geht...
Code:
typedef void (WINAPI * glBegin_t)( void );
//..
glMyBegin = (glBegin_t)GetProcAddress( myDll, "glBegin" );
(void*) geht nicht, in C schon aber damit bekommt man lediglich eine Warnung weniger.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 23:03
Zitat von sniper_w:
Ich habe es schon so gelöst, habe aber gehoft dass es einfacher geht...
Code:
typedef void (WINAPI * glBegin_t)( void );
//..
glMyBegin = (glBegin_t)GetProcAddress( myDll, "glBegin" );
Ich find's nicht unbedingt "unelegant", kannst ja mit dem Typedef dann auch die Variable "glMyBegin" deklarieren:
Code:
glBegin_t glMyBegin;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: GetProcAddres mit c++ ?!

  Alt 28. Okt 2005, 23:12
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
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz