通过类库

时间:2016-07-18 19:34:18

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

我一直在尝试创建一个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应用程序中调用相关的类和函数,并且运行良好,但样本似乎正在从&#访问类34; 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团队询问了这一挑战,他们似乎正在制定解决方案。

1 个答案:

答案 0 :(得分:1)

为“回答”而不是“评论”道歉,但我仍然是新的贡献者。

我最初的本能是怀疑您的问题不是与Unity3D有关。它与C#和Unity3D中的整个编程环境一起使用。 C#不允许进行非托管内存分配。使C ++库在C#中工作是一门完整的艺术,这就是所谓的“封送处理”代码,结果整个行业都围绕着从C ++到Unity3D的封送处理插件。

之所以没有得到字符串,是因为您实际上是在发送和接收指向单个字符的指针。

不幸的是,我为Unity编写C ++代码的单一经验是在5年前,我对自己的解决方案有些不满意。我所记得的是,最“棘手”但最明显的解决方案是计算出可能传递的最大字符串大小,然后在分隔的两边传递和接收该预定义大小的字符串。

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

让我们知道是否可以向您发送正确的消息。