As you know result of function is in edx + eax pair, why not store it somewhere before "ret"?
I never used memory injecting library and C#, so I cannot show you the code. But I guess it is like mostly:
Code:
code_piece = mem_lib.new();
code_piece.allocate_variable("guid", "uint64");
string _ar_asm[] =
{
"call " + ((uint)Globals.WoW.MainModule.BaseAddress + Offsets.ObjectManager.ClntObjMgrGetActivePlayer),
"mov " + code_piece.variable_address("guid") + ", eax",
"mov " + (code_piece.variable_address("guid") + 4) + ", edx",
"retn",
};
code_piece.add_code(_ar_asm);
Sorry for just pseudo code.