通过类库访问Unity IL2CPP项目中的Windows 10函数

Accessing Windows 10 functions from Unity IL2CPP project via a class library

本文关键字:Windows 函数 项目 IL2CPP 类库 访问 Unity      更新时间:2023-10-16

我一直在尝试创建一个UWP类库,让我可以访问Windows 10s的本机功能,如Windows.Security.Authentication.OnlineId。我想从设备中获取用户名和ID,用于Unity UWP IL2CPP项目。我目前可以使用Unity为ios内置的社交类来做到这一点,谷歌已经编写了一些代码,允许它与同一类无缝工作,但适用于android的google Play Games。

我从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构建成功地从unity内部调用此代码,但我的主要问题是如何添加适当的引用,或者如何创建这个类库来访问WebAccountProvider类?

如有任何帮助,将不胜感激

更新:我已经在MS团队自己的网站上询问了这一挑战,他们似乎正在制定解决方案。

很抱歉"回答"而不是"评论",但我仍然是一个新的贡献者。

我最初的第一直觉是怀疑你的问题不在Unity3D;它与C#和Unity3D内部的整个编程环境配合使用。C#不允许非托管内存分配。让C++库在C#中工作是一门完整的艺术,它被称为";编组;代码,因此整个行业都围绕着将插件从C++封送到Unity3D。

你没有得到字符串的原因是,你实际上是在发送和接收一个指向单个字符的指针

不幸的是,我为Unity整理C++代码的唯一经历是五年前,我对自己的解决方案有点生疏。我记得的是,最"技巧"但显而易见的解决方案是计算出可能传递的字符串的最大大小,并在除法的两边传递和接收预定义大小的字符串。

https://learn.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-strings

如果这能让你朝着正确的方向前进,请告诉我们。