首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将C程序放在C# UWP中?

如何将C程序放在C# UWP中?
EN

Stack Overflow用户
提问于 2021-01-05 20:07:51
回答 1查看 702关注 0票数 0

我正在创建一个适用于文件的Windows 10应用程序。对于我使用的图形用户界面(C#)和文件处理,我想使用C语言(VisualStudio2019)。

我尝试过这些解决办法(没有一种有效):

  1. 用Windows向导(DLL)创建的C程序,然后是DllImport

尝试通过使用DllImport (在C#控制台应用程序中工作)将其添加到UWP中。

C文件中的代码:

代码语言:javascript
复制
#include<stdio.h>

_declspec(dllexport) int getNumberOfFiles()
{
    ...
}

C# UWP应用程序中的代码:

代码语言:javascript
复制
 [DllImport(@"...\WorkFilesDll\Debug\WorkFilesDll.dll", EntryPoint = "getNumberOfFiles", CallingConvention = CallingConvention.Cdecl)]
 internal static extern int getNumberOfFiles();

引发以下异常:

System.DllNotFoundException HResult=0x80131524 Message=Unable以加载DLL '...\WorkFilesDll\Debug\WorkFilesDll.dll‘或其依赖项之一:拒绝访问。(HRESULT例外: 0x80070005 (E_ACCESSDENIED))

  1. 用Windows桌面向导(DLL)创建的C程序,然后添加为参考

尝试添加与引用相同的dll (引用->添加引用->浏览->添加->确定)。按“确定”按钮后,以下消息指示失败:

不能添加对"...\WorkFilesDll\Debug\WorkFilesDll.dll“的引用。请确保文件是可访问的,这是一个有效的程序集或COM组件。

  1. 我为C代码(C++、UWP)创建了其他类型的项目: Dll (Universal )、Windows组件(Universal )。结果是一样的。
  2. 我创建了其他类型的项目(C#、UWP):类库(Universal )、(Universal ),以便将这些项目添加到UWP中,并向这些项目中添加上述dll (间接添加到UWP的C代码)。结果是一样的。

我发现了很多这样的问题和文章,但我没有看到明确的答案,或者答案对我没有用。其中一些是:

我也读过关于静态库的文章。我未能执行这些建议。

如何将C代码放在UWP (C#)中?

是静态库是我的应用程序的答案吗?

哪个更适合这个应用程序:DLL还是静态库?为什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 05:53:49

请检查以下步骤:

  1. 在新解决方案中创建C# UWP项目。
  2. 在同一解决方案中添加C++ DLL(Universal )项目(命名为MyDll1)。
  3. 在C++ DLL项目中添加C代码。例如:
代码语言:javascript
复制
//MyDll1.h
#pragma once

extern "C" _declspec(dllexport) int Sum(int a, int b);

//MyDll1.cpp
#include "pch.h"
#include "MyDll1.h"
int Sum(int a, int b)
{
    return a + b;
}
  1. 在同一个项目中添加一个Windows运行时组件(C++/)项目。
  2. 右键单击Windows组件(C++/WinRT)项目的名称,并选择Add > Reference选项,检查项目选项卡中的DLL项目。单击OK
  3. 有一个自动生成的类Class,您可以根据需要使用该类或添加其他类( add > needed > Code > Midl (.idl))。新类必须从midl文件中生成。您可以获得有关引用文档的编写api的更多信息。
  4. Class类为例。在Windows Runtime Component(C++/WinRT)项目中包含dll的头文件。
代码语言:javascript
复制
//Class.h
#include "..\MyDll1\MyDll1.h"
  1. MyProperty类中显示了一个名为Class的示例方法。MyProperty方法被添加到Class.idl文件中,编译器将在构建项目后在Class.hClass.cpp中生成相应的方法。您需要转到\RuntimeComponent\ RuntimeComponent \Generated Files\sources\Class.hClass.cpp文件资源管理器中的位置,并打开.h和.cpp文件,将生成的方法复制到Visual中的代码中。您可以使用MyProperty方法将值传递给C#项目或在类中添加其他方法。有关如何在idl文件中添加新方法的更多信息,请参考文档
  2. 您可以在Sum(int a, int b)方法中调用MyDll1项目。
代码语言:javascript
复制
int32_t Class::MyProperty()
{
    int t = Sum(1, 2);
    return t;
}
  1. 右键单击C# UWP项目的名称,并选择选项Add > Reference,检查项目中的Windows运行时组件(C++/WinRT)项目。单击OK
  2. 在C# UWP项目中添加包含语句。
代码语言:javascript
复制
using RuntimeComponent;   // RuntimeComponent is the name of Windows Runtime Component(C++/WinRT) project.
  1. 您可以在MyProperty UWP项目中调用C#方法。
代码语言:javascript
复制
RuntimeComponent.Class myClass = new Class();
var value = myClass.MyProperty;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65585847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档