【问题标题】:Win32.memcpy Error in Watershed Image Segmentation分水岭图像分割中的 Win32.memcpy 错误
【发布时间】:2012-02-27 10:37:34
【问题描述】:

我正在尝试实现前程序员所说的分水岭图像分割:

Watershed using c# or c++

我也尝试添加 FilterGrayToGray.cs 代码,但出现 win32.memcpy 错误

错误显示:“名称win32在此上下文中不存在”

如果我们将 Win32.memcpy 转换为 Microsoft.Win32.memcpy 那么它会说“命名空间中不存在 memcpy”

【问题讨论】:

  • 这个问题很少受到关注的原因是很难在问题或链接页面中找到对memcpy 的任何引用。请添加无法编译的代码,它会很容易修复。

标签: .net image image-processing watershed


【解决方案1】:

memcpy 不是 .NET Framework 的一部分 - memcpy 是需要创建 p/Invoke 定义的非托管本机 API。 memcpy 的定义必须在不同的文件中。

请看下面的例子:

/// <summary>
/// Windows API functions and structures.
/// </summary>
internal static class Win32
{
    /// <summary>
    /// Copy a block of memory.
    /// </summary>
    ///
    /// <param name="dst">Destination pointer.</param>
    /// <param name="src">Source pointer.</param>
    /// <param name="count">Memory block's length to copy.</param>
    ///
    /// <returns>Return's the value of <b>dst</b> - pointer to destination.</returns>
    ///
    [DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )]
    public static extern IntPtr memcpy(
        IntPtr dst,
        IntPtr src,
        UIntPtr count );
    }
}

【讨论】:

  • memcpy 的定义太糟糕了。从什么时候开始int 可以代表一个指针?从什么时候开始,int 对size_t 来说是合理的?
  • @David Heffernan:size_t 的合理性是什么?单位?我不会说它可怕。可以改进吗?当然。顺便说一句,这个定义有一个明显的优势,即肯定与使用它的代码兼容——它们来自同一个项目。
  • @DavidHeffernan - 更新 - 我只是剪切并粘贴了示例,没有仔细查看它,假设它是正确的。
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 2012-07-11
  • 2020-07-27
  • 2018-05-12
  • 2013-10-23
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多