我正在创建一个适用于文件的Windows 10应用程序。对于我使用的图形用户界面(C#)和文件处理,我想使用C语言(VisualStudio2019)。
我尝试过这些解决办法(没有一种有效):
尝试通过使用DllImport (在C#控制台应用程序中工作)将其添加到UWP中。
C文件中的代码:
#include<stdio.h>
_declspec(dllexport) int getNumberOfFiles()
{
...
}
C# UWP应用程序中的代码:
[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))
尝试添加与引用相同的dll (引用->添加引用->浏览->添加->确定)。按“确定”按钮后,以下消息指示失败:
不能添加对"...\WorkFilesDll\Debug\WorkFilesDll.dll“的引用。请确保文件是可访问的,这是一个有效的程序集或COM组件。
我发现了很多这样的问题和文章,但我没有看到明确的答案,或者答案对我没有用。其中一些是:
我也读过关于静态库的文章。我未能执行这些建议。
如何将C代码放在UWP (C#)中?
是静态库是我的应用程序的答案吗?
哪个更适合这个应用程序:DLL还是静态库?为什么?
谢谢!
发布于 2021-01-13 05:53:49
请检查以下步骤:
MyDll1
)。//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;
}
Class
,您可以根据需要使用该类或添加其他类( add > needed > Code > Midl (.idl))。新类必须从midl文件中生成。您可以获得有关引用文档的编写api的更多信息。Class
类为例。在Windows Runtime Component(C++/WinRT)
项目中包含dll的头文件。//Class.h
#include "..\MyDll1\MyDll1.h"
MyProperty
类中显示了一个名为Class
的示例方法。MyProperty
方法被添加到Class.idl
文件中,编译器将在构建项目后在Class.h
和Class.cpp
中生成相应的方法。您需要转到\RuntimeComponent\ RuntimeComponent \Generated Files\sources\Class.h
和Class.cpp
在文件资源管理器中的位置,并打开.h和.cpp文件,将生成的方法复制到Visual中的代码中。您可以使用MyProperty
方法将值传递给C#项目或在类中添加其他方法。有关如何在idl文件中添加新方法的更多信息,请参考文档。Sum(int a, int b)
方法中调用MyDll1
项目。int32_t Class::MyProperty()
{
int t = Sum(1, 2);
return t;
}
using RuntimeComponent; // RuntimeComponent is the name of Windows Runtime Component(C++/WinRT) project.
MyProperty
UWP项目中调用C#方法。RuntimeComponent.Class myClass = new Class();
var value = myClass.MyProperty;
https://stackoverflow.com/questions/65585847
复制相似问题