【问题标题】:c# interop with unmanaged dll时间:2019-05-10 标签:c#interop with unmanageddll
【发布时间】:2013-11-25 03:31:22
【问题描述】:

我想做的是一个 CUDA 加速分形生成器。我想使用 c# 创建 ui,但分形图像是由在 dll 中编译的非托管 cuda c 生成的。按照一些教程,我设法使互操作与简单数据一起工作,但我很难创建位图图像并将其传递回 c# 应用程序。

我可以使用 CUDA 成功地将 dll 中的缓冲区与像素数据放在一起,但是如何使用指向该缓冲区的指针在 c sharp 应用程序中制作位图?

【问题讨论】:

  • 你能发布一些代码来显示你希望 C# 看到的位图吗?

标签: c# dll cuda


【解决方案1】:

其中一种方法可以做到这一点:

如果你的原生函数看起来像:

void foo(void *bitmap);

你可以使用P/Invoke来声明:

[DllImport(...)]
public static unsafe void foo(void *bitmap);

然后按如下方式使用:

unsafe
{
    byte[] buffer = new byte[...];
    fixed (void *pBuffer = buffer)
    {
        foo(pBuffer);
    }
}

请注意,您应该允许不安全的代码(在项目设置的“构建”选项卡中)。

【讨论】:

  • 谢谢。后续问题,我将如何使用该缓冲区创建可用于图片框的位图图像?抱歉,如果这个问题看起来比第一个问题更愚蠢,但我是 c# 新手。
  • 我不确定你是如何在 WinForms 中做到这一点的。我看到 PictureBox 控件有一个名为 Image 的属性,您应该设置它。您可以从字节数组创建一个 Image 对象,如下所述:codeproject.com/Articles/15460/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2020-10-01
相关资源
最近更新 更多