Steam SDK - Init

Please note: Valve, the Valve logo, Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation. Please have a look at the homepage to read about and download the SDK.

This is the init file for the Steam header.

Code date: 1st September 2021, SDK date: 8th January 2021

 

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
unit SteamAPINewInit;

interface

uses SteamAPI;

type
  THSteamUser = int32;
  THSteamPipe = int32;


{$IFDEF Win32}
{
   Aufruf unter 32bit jeweils:
   myself: pointer;
   asm
     mov ECX, myself;
   end;
   GetISteamUser(bla);

}

  TGetISteamXYZ               = function(a,b: byte; self: pointer;              pchVersion: PAnsiChar; hSteamPipe: THSteamPipe; hSteamUser: THSteamUser): pointer; register;
  TGetISteamUtils             = function(a,b: byte; self: pointer;              pchVersion: PAnsiChar; hSteamPipe: THSteamPipe): pointer; register;
{$ENDIF}
{$IFDEF Win64}
  TGetISteamXYZ               = function(self: pointer; hSteamUser: THSteamUser; hSteamPipe: THSteamPipe; pchVersion: PAnsiChar): pointer; pascal;
  TGetISteamUtils             = function(self: pointer; hSteamPipe: THSteamPipe; pchVersion: PAnsiChar): pointer; pascal;
{$ENDIF}

  PSteamClientVTable = ^TSteamClientVTable;
  TSteamClientVTable = record
    CreateSteamPipe: pointer;
    BReleaseSteamPipe: pointer;
    ConnectToGlobalUser: pointer;
    CreateLocalUser: pointer;
    ReleaseUser: pointer;
    GetISteamUser: TGetISteamXYZ;
    GetISteamGameServer: TGetISteamXYZ;
    SetLocalIPBinding: pointer;
    GetISteamFriends: TGetISteamXYZ;
    GetISteamUtils: TGetISteamUtils;
    GetISteamMatchmaking: pointer;
    GetISteamMatchmakingServers: pointer;
    GetISteamGenericInterface: TGetISteamXYZ;
    GetISteamUserStats: TGetISteamXYZ;
    GetISteamGameServerStats: TGetISteamXYZ;
    GetISteamApps: TGetISteamXYZ;
    GetISteamNetworking: TGetISteamXYZ;
    GetISteamRemoteStorage: TGetISteamXYZ;
    GetISteamScreenshots: TGetISteamXYZ;
    RunFrame: pointer;        // valide??
    GetIPCCallCount: pointer;
    SetWarningMessageHook: pointer;
    BShutdownIfAllPipesClosed: pointer;
    GetISteamHTTP: TGetISteamXYZ;
    GetISteamUnifiedMessages: TGetISteamXYZ;
    GetISteamController: TGetISteamXYZ;
    GetISteamUGC: TGetISteamXYZ;
    GetISteamAppList: TGetISteamXYZ;
    GetISteamMusic: TGetISteamXYZ;
    GetISteamMusicRemote: TGetISteamXYZ;
    GetISteamHTMLSurface: TGetISteamXYZ;


    {

    // Helper functions for internal Steam usage
    STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
    STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
    STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )

    // inventory
    virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Video
    virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;      }
  end;

  PSteamClient = ^TSteamClient;
  TSteamClient = record
    vtable: PSteamClientVTable;
  end;


  PCSteamAPIContext = ^TCSteamAPIContext;
  TCSteamAPIContext = record
    user: THSteamUser;
    pipe: THSteamPipe;
    m_pSteamClient: PSteamClient;
    m_pSteamUser: TSteamUser;
    m_pSteamFriends: TSteamFriends;
    m_pSteamUtils: TSteamUtils;
    m_pSteamApps: TSteamApps;
    m_pSteamUGC: TSteamUGC;
    function Init: boolean;
  end;

  function SteamAPI_GetHSteamUser: THSteamUser; cdecl; external STEAM_DLL_FILENAME;
  function SteamAPI_GetHSteamPipe: THSteamPipe; cdecl; external STEAM_DLL_FILENAME;
  function SteamInternal_CreateInterface(ver: PAnsiChar): pointer; cdecl; external STEAM_DLL_FILENAME;

var
  SteamContext: TCSteamAPIContext;

implementation

{ TCSteamAPIContext }

function TCSteamAPIContext.Init: boolean;
begin
  result := false;
  user := SteamAPI_GetHSteamUser;
  pipe := SteamAPI_GetHSteamPipe;
  if pipe = 0 then
    exit;
  m_pSteamClient := PSteamClient(SteamInternal_CreateInterface('SteamClient017'));

{$IFDEF Win32}
  SteamUser :=        m_pSteamClient.vtable.GetISteamUser(0,0,m_pSteamClient,'SteamUser021', pipe, user);
  SteamUserStats :=   m_pSteamClient.vtable.GetISteamUserStats(0,0,m_pSteamClient,'STEAMUSERSTATS_INTERFACE_VERSION012', pipe, user);
  SteamFriends :=     m_pSteamClient.vtable.GetISteamFriends(0,0,m_pSteamClient,'SteamFriends017', pipe, user);
  SteamUtils :=       m_pSteamClient.vtable.GetISteamUtils(0,0,m_pSteamClient,'SteamUtils010', pipe);
  SteamUGC :=         m_pSteamClient.vtable.GetISteamUGC(0,0,m_pSteamClient,'STEAMUGC_INTERFACE_VERSION015', pipe, user);
  SteamApps :=        m_pSteamClient.vtable.GetISteamApps(0,0,m_pSteamClient,'STEAMAPPS_INTERFACE_VERSION008', pipe, user);
  SteamNetworking :=  m_pSteamClient.vtable.GetISteamNetworking(0,0,m_pSteamClient,'SteamNetworking006', pipe, user);
{$ENDIF}
{$IFDEF Win64}
  SteamUser :=        m_pSteamClient.vtable.GetISteamUser(m_pSteamClient, user, pipe, 'SteamUser021');
  SteamUserStats :=   m_pSteamClient.vtable.GetISteamUserStats(m_pSteamClient, user, pipe, 'STEAMUSERSTATS_INTERFACE_VERSION012');
  SteamFriends :=     m_pSteamClient.vtable.GetISteamFriends(m_pSteamClient, user, pipe, 'SteamFriends017');
  SteamUtils :=       m_pSteamClient.vtable.GetISteamUtils(m_pSteamClient, pipe, 'SteamUtils010');
  SteamUGC :=         m_pSteamClient.vtable.GetISteamUGC(m_pSteamClient, user, pipe, 'STEAMUGC_INTERFACE_VERSION015');
  SteamApps :=        m_pSteamClient.vtable.GetISteamApps(m_pSteamClient, user, pipe, 'STEAMAPPS_INTERFACE_VERSION008');
  SteamNetworking :=  m_pSteamClient.vtable.GetISteamNetworking(m_pSteamClient, user, pipe, 'SteamNetworking006');
{$ENDIF}

  result := true;
end;

end.