C# 从WinRT组件使用DLL(通用应用程序) 我有一个C++(原生代码)DLL项目,为iOS和Android开发的。我想把它移植到C++的DLL(通用应用程序)上,以被C语言通用存储应用程序所消耗。代码不依赖于硬件

C# 从WinRT组件使用DLL(通用应用程序) 我有一个C++(原生代码)DLL项目,为iOS和Android开发的。我想把它移植到C++的DLL(通用应用程序)上,以被C语言通用存储应用程序所消耗。代码不依赖于硬件,c#,visual-c++,dll,windows-runtime,windows-8.1,C#,Visual C++,Dll,Windows Runtime,Windows 8.1,作为第一步,在移动所有代码之前,我创建了一个小型测试解决方案,如下所示: 创建了一个C++ DLL(通用应用程序),MyDll,它有一个C++ ADD1(int,int)< /C>函数> 创建了一个C++的WINRTRe构件(通用应用程序),它具有C++ ADD2(int,int)< /C>函数。李> 我创建了一个C#Universal应用程序myApp,它调用Add2,调用Add1 编译通过了OK,但是当我运行myApp时,应用程序崩溃,并报告myDll没有被激活 上膛了 我的问题是:

作为第一步,在移动所有代码之前,我创建了一个小型测试解决方案,如下所示:

  • 创建了一个C++ DLL(通用应用程序),MyDll,它有一个C++ <代码> ADD1(int,int)< /C>函数>
  • 创建了一个C++的WINRTRe构件(通用应用程序),它具有C++ <代码> ADD2(int,int)< /C>函数。李>
  • 我创建了一个C#Universal应用程序myApp,它调用
    Add2
    ,调用
    Add1
  • 编译通过了OK,但是当我运行myApp时,应用程序崩溃,并报告myDll没有被激活 上膛了

    我的问题是:

  • 我上面描述的场景可能吗?如果是这样,是什么问题导致myApp崩溃
  • <> LI>有没有更好的方法来移植iOS/Android C++代码,在C语言的通用应用程序中被消耗? Thx

    1)像Hans一样,我的第一个猜测是你没有在应用程序包中包含Dll。如果未在包中部署,则无法加载。由于无法添加对DLL的引用,因此需要显式添加它:

    将文件添加到项目中,在“解决方案资源管理器”窗口中打开文件的属性,并将其标记为要包含在应用程序包中的内容

    在部署之后,检查appx目录中是否实际存在out


    2) 这可能是最简单的。您还可以只包含Dll和pinvoke。无论哪种方式,您都需要确保dll对Windows应用商店应用程序有效

    所有dll都必须包含在最终软件包中。您缺少第一个DLL。不太清楚您是如何做到这一点的,但是构建系统不会有很多好的线索来知道这种依赖性的存在。需要添加对DLL的引用。如何添加对DLL的引用?WinRT组件(上面的步骤2)无法将DLL添加为引用。C#应用程序将不接受上面步骤1中创建的DLL。