On Sunday, 10 June 2018 at 10:47:58 UTC, rikki cattermole wrote:
On 10/06/2018 10:29 PM, cc wrote:
And it successfully fires the 3-arg Run method of the callback object. However for some reason the function table of the ISteamClient seems to be off by one.. it kept calling the wrong methods until I commented one out, in this case GetIntPtr() as seen above, then everything seemed to line up.  Not sure what the proper way to ensure it matches the C++ layout here, but at least it seems to be mostly working for now.  Thanks again!

Ugh what GetIntPtr? Unless of course this header file is wrong[0].

Make the members match exactly, order and everything and it should "just work".

[0] https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/public/steam/isteamclient.h#L113

Woops, that GetIntPtr came from the .cs header in the same folder as the C++ headers distributed with the SDK, that'll teach me to ctrl+f "class ISteamClient" in all open files and copy/paste before reading.

Anyway I played around with it some more and found the one single line that was causing the problem. It needs this:

HSteamPipe SteamAPI_GetHSteamPipe();

rather than one of these:

HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(ISteamClient instancePtr);
virtual HSteamPipe CreateSteamPipe() = 0;

It looks like the pipe is already created upon initializing and calling CreateSteamPipe creates a secondary one that doesn't receive callbacks. SteamAPI_GetHSteamPipe is called inline to retrieve the current pipe on initialization of the the classed version of the API, but the documentation doesn't mention it exists at all, leading to confusion when using the flat version. Well, mystery solved.

Reply via email to