Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PureBasic] Alternate GetProcAddress
#1
Code:
Procedure.l GetProcAddressEx(*hModule, lpProcName.s)
  
  Protected *Image_Dos_Header.IMAGE_DOS_HEADER = *hModule
  
  Protected *Image_Nt_Headers.IMAGE_NT_HEADERS = *hModule + *Image_Dos_Header\e_lfanew
  
  Protected *Image_Export_Directory.IMAGE_EXPORT_DIRECTORY = *hModule + *Image_Nt_Headers\OptionalHeader\DataDirectory[0]\VirtualAddress
  
  Protected dwNumberOfNames.l
  
  Protected Ordinal.w
  
  Protected dwAddress.l
  
  Protected dwName.l

  For dwNumberOfNames = 0 To *Image_Export_Directory\NumberOfNames - 1
    
    dwAddress = *hModule + *Image_Export_Directory\AddressOfNames + (dwNumberOfNames * 4)
    
    dwName = *hModule + PeekL(dwAddress)
    
    If lstrcmp_(PeekS(dwName, #PB_Any, #PB_Ascii), lpProcName) = 0
      
      dwAddress = *Image_Export_Directory\AddressOfNameOrdinals + (dwNumberOfNames * 2)
      
      Ordinal = PeekW(*hModule + dwAddress)
      
      dwAddress = *Image_Export_Directory\AddressOfFunctions + (Ordinal * 4)
      
      ProcedureReturn *hModule + PeekL(*hModule + dwAddress)
      
    EndIf
    
  Next dwNumberOfNames
  
EndProcedure

Example usage of this procedure.

Code:
Prototype proto_MessageBox(hwnd.l, lpText.s, lpCaption.s, wType.l)
Define _MessageBox.proto_MessageBox

  _MessageBox = GetProcAddressEx(LoadLibrary_("USER32.DLL"), "MessageBoxW")

_MessageBox(0, "It Works!", "Guess What!", 0)

Advised to compile In unicode mode, and xp theme support disabled. Thanks! Victoire (Written By Me, One of my first ventures into the realm of PureBasic)
Reply


Messages In This Thread
[PureBasic] Alternate GetProcAddress - by Modest - 01-09-2011, 08:38 PM

Forum Jump:


Users browsing this thread: 3 Guest(s)