Sam*_*myG 13 c++ unity-game-engine visual-studio-2015 il2cpp uwp
我一直在尝试创建一个UWP类库,使我可以访问Windows 10s本机功能,例如Windows.Security.Authentication.OnlineId.我想从设备获取用户名和ID,以便在Unity UWP IL2CPP项目中使用.我目前能够使用Unity内置的ios社交类进行此操作,谷歌编写的代码允许它与同一类无缝地工作,但是用于Android的Google Play游戏.
我已经从github上下载了一个示例(https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WebAccountManagement),它演示了如何在UWP应用程序中调用相关的类和函数,并且运行良好但是样本似乎是从"Windows.Foundation.UniversalApiContract"类访问类.
我似乎无法找到将其添加到基本UWP类库的方法,因此我可以调用所需的类,如Windows :: Security :: Credentials :: WebAccountProvider.
我能做的最好的事情是在类库中创建一个基本函数,它返回一个小的硬编码字符串,以测试该概念是否可以远程实现.: -
extern "C" __declspec(dllexport) wchar_t* __stdcall GetMyString()
{
wchar_t* myString = L"Guuuper";
auto resultBufferLength = wcslen(myString) + 1;
wchar_t* result = static_cast<wchar_t*>(CoTaskMemAlloc(resultBufferLength * sizeof(wchar_t)));
wcscpy_s(result, resultBufferLength, myString);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我在尝试这样做的整个过程可以在这里找到: - http://forum.unity3d.com/threads/returning-c-string-to-il2cpp-windows-store-project.395284/
我已经能够通过UWP构建成功地从统一内部调用此代码,但我的主要问题是如何添加适当的引用或如何创建此类库来访问WebAccountProvider类?
任何帮助将非常感激
更新:我已经向他们自己网站的MS团队询问了这个挑战,他们似乎正在研究解决方案.
对于“回答”而不是“评论”表示歉意,但我仍然是一个新的贡献者。
我最初的第一直觉是怀疑你的问题不在于Unity3D;它使用 C# 和 Unity3D 内的整个编程环境。C# 不允许非托管内存分配。让 C++ 库在 C# 中工作是一门完整的艺术,它被称为“编组”代码,因此整个行业都基于从 C++ 到 Unity3D 的编组插件。
您没有获得字符串的原因是因为您实际上正在发送和接收指向单个字符的指针。
不幸的是,我为 Unity 编组 C++ 代码的唯一经验是五年前,我对我的解决方案有点生疏。我所记得的是,最“hacky”但显而易见的解决方案是计算出可能传递的字符串的最大大小,并且在分隔的两侧传递和接收该预定义大小的字符串。
https://learn.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-strings
让我们知道这是否能让您朝着正确的方向前进。