我尝试在我的UWP应用中使用"libheif" library来解码一些HEIC图像。在**heif.h中,我将以下C++代码**extern "C" __declspec(dllexport)
添加到我想从C#代码调用的函数中:
LIBHEIF_API
extern "C" __declspec(dllexport) struct heif_context* heif_context_alloc(void);
LIBHEIF_API
extern "C" __declspec(dllexport) void heif_context_free(struct heif_context*);
LIBHEIF_API
extern "C" __declspec(dllexport) struct heif_error heif_context_read_from_file(struct heif_context*, const char* filename,
const struct heif_reading_options*);
...
然后我把这个库编译成一个DLL文件,并把它添加到我的UWP项目中。在**C#**代码中,我这样做了:
namespace Libraries
{
public class PInvokeCode
{
[DllImport("ms-appx:///libheif.dll")]
public static extern struct heif_context_alloc();
[DllImport("ms-appx:///libheif.dll")]
public static extern void heif_context_free(struct heif_context);
[DllImport("ms-appx:///libheif.dll")]
public static extern struct heif_error heif_context_read_from_file(struct heif_context*, const char* filename,
const struct heif_reading_options*);
}
}
当然,在我的UWP中,我允许不安全的代码,并且我将DLL设置为内容。但是,我仍然不能让代码工作。这是我第一次尝试这样的事情,我不知道确切地说,我哪里出错了!
如果您需要它,这里有libheif.dll和heif.h文件的链接。
1条答案
按热度按时间ogq8wdun1#
1.您必须确定应用程序是作为32位还是64位应用程序运行。
1.然后确保libheif.dll(主)可以链接到位于同一目录libde265.dll(解码器)和libx265.dll(编码器)中的依赖性dll。
1.因此,如果缺少上述任何库,请从https://github.com/mcychan/libheif/releases下载。