c++ - 通过类库从 Unity IL2CPP 项目访问 Windows 10 功能

标签 c++ unity3d visual-studio-2015 uwp il2cpp

我一直在尝试创建一个 UWP 类库,让我可以访问 Windows 10 的 native 功能,例如 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;

}

我尝试这样做的整个过程都可以在这里找到:-
http://forum.unity3d.com/threads/returning-c-string-to-il2cpp-windows-store-project.395284/

我已经能够通过 UWP 构建从统一内部成功调用此代码,但我的主要问题是我将如何添加适当的引用或我将如何创建这个类库来访问 WebAccountProvider 类?

任何帮助将非常感激

更新:我已通过 their own site 询问 MS 团队关于这个挑战,他们似乎正在寻找解决方案。

最佳答案

为“回答”而不是“评论”道歉,但我仍然是新的贡献者。
我最初的第一直觉是怀疑你的问题不在于 Unity3D。它与 C# 和 Unity3D 中的整个编程环境一起使用。 C# 不允许非托管内存分配。让 C++ 库在 C# 中工作是一门艺术,它被称为“编码”代码,因此整个行业都基于从 C++ 到 Unity3D 的编码插件。
您没有得到字符串的原因是因为您实际上是在发送和接收指向单个字符的指针。
不幸的是,我为 Unity 编码 C++ 代码的单一经验是五年前,我对我的解决方案有点生疏。我记得的是,最“hacky”但最明显的解决方案是计算出可能传递的字符串的最大大小,并且在分隔的两侧,传递和接收该预定义大小的字符串。
https://docs.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-strings
让我们知道这是否会让您朝着正确的方向前进。

关于c++ - 通过类库从 Unity IL2CPP 项目访问 Windows 10 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38444639/

相关文章:

c++ - 将字符串解析为不区分大小写的 protobuf 枚举

c++ - 为什么字符的大小只有 8 位?

unity3d - Unity 相机剪辑问题

c# - 在 Unity 中建立组件之间关系的最佳做法是什么?

android - 适用于Android的Unity构建因Gradle错误而失败

c# - Visual Studio 2015 调试可视化工具更改

visual-studio-2015 - Visual Studio 2015 本地帮助不起作用

c++ - 如何一次删除 `cmake -D` 定义的所有变量?

C++将二维数组的一部分复制到另一个二维数组,性能

sql-server - Visual Studio 2015 Update 2 和 Sql Server 2016 架构比较