-
Notifications
You must be signed in to change notification settings - Fork 0
FGMPRawSig
The one callback shape every backend normalises to.
Declared in Plugins/GMP/Source/GMP/GMP/GMPHub.h:31
using FGMPRawSig = TGMPFunction<void(const FGMPTypedAddr*, const FGMPExtra*)>;FGMPRawSig is the type you name in C++. What actually crosses the boundary, after
TGMPFunction erases it, is a three-argument bare function pointer:
void (*)(void* Self, const FGMPTypedAddr* Params, const FGMPExtra* Extra);| Parameter | What it is |
|---|---|
Self |
the callable's own address — not a UObject, not a vtable pointer |
Params |
array of Extra->Size erased arguments — see FGMPTypedAddr
|
Extra |
the dispatch context — see FGMPExtra |
Because Self is the callable rather than an object with a vtable, the call is an indirect jump and not a
virtual dispatch.

C++, Blueprint and all five scripting languages reach the core through this signature. Adding a language
means implementing this single entry point and translating (Params, Extra) into that language's values —
not writing a marshalling layer per language.
| Backend | What it does with (Params, Extra)
|
|---|---|
| UnLua / slua | push onto the lua stack |
| Puerts | convert to v8 values |
| AngelScript | fill AngelScript arguments |
| C# | pass straight through to an [UnmanagedCallersOnly] entry |
C# registers a bare function pointer of its own shape:
using FGMPOnFireFn = void (*)(int64 /*cbHandle*/, const FGMPTypedAddr* /*paddrs*/, int32 /*numArgs*/);Structurally the same idea — context first, then arguments — with the context being a managed delegate id
rather than a void* Self. Native never dereferences it; it is handed back untouched. No reflection and no
marshalling on that path.
With GMP_WITH_TYPENAME off, FGMPTypedAddr is layout-identical to uint64, so Params is literally an
array of addresses. Type information, if needed, comes from Extra->TypeNames and Extra->Size.
TGMPFunction · FGMPTypedAddr · FGMPExtra · Transparent rewrite
GMP · Reference wiki — one page per named thing. Guided introduction: project site · 中文站点 · measured dispatch stack Source: repository · README · README 中文
Pages here are generated from wiki/ in the main repository — edit there, not on the wiki.
Concepts
- Why a string key
- Dispatch layers
- Parameter compatibility
- Signature inference
- Key baking
- Transparent rewrite
- Jump tracing
Sending and listening
- NotifyMessage family
- ListenMessage family
- StoreObjectMessage
- MSGKEY
- FSigSource
- FSigHandle
- FGMPKey
- FGMPResponder
Dispatch internals
Reflection and data
Editor
Build