Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60

    (C) importare una funzione da una dll

    Buongiorno a tutti,
    stavo cercando di capire come vengono importate dinamicamente le funzioni dalle librerie DLL quando mi sn imbattuto in questo errore di debug:

    The value of ESP was not properly saved across function call..ecc ecc


    Il codice del mio programma è questo

    codice:
    #include "stdafx.h"
    #include <stdio.h>
    #include <windows.h>
    typedef  HGLOBAL (*GLOBALALLOC)(UINT,SIZE_T);
    
    
    int main(){
    GLOBALALLOC MyGlobalAlloc;	
    MyGlobalAlloc=(GLOBALALLOC)GetProcAddress(LoadLibrary("Kernel32.dll"),"GlobalAlloc");
    char *rrr=(char *)MyGlobalAlloc(GPTR,sizeof(char)*2);
    return 0;
    }
    dove sbaglio?? :master:

  2. #2
    Le API di Windows usano come convenzione di chiamata stdcall, mentre lì nel typedef non hai specificato alcuna convenzione di chiamata, per cui, salvo impostazioni contrastanti a livello di progetto, di default è cdecl. Ovviamente chiamando una funzione con una convenzione di chiamata differente da quella che si aspetta il risultato è la corruzione dello stack.
    Per risolvere, cambia il typedef in
    codice:
    typedef  HGLOBAL (WINAPI * GLOBALALLOC)(UINT,SIZE_T);
    (WINAPI non è altro che un #define per __declspec(stdcall)).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.