.net 流域图像分割中的Win32.memcpy错误
我正试图实现分水岭图像分割,正如前程序员在: 我也尝试添加FilterGrayToGray.cs代码,但我得到了win32.memcpy的错误 错误显示:“win32名称在此上下文中不存在”.net 流域图像分割中的Win32.memcpy错误,.net,image,image-processing,watershed,.net,Image,Image Processing,Watershed,我正试图实现分水岭图像分割,正如前程序员在: 我也尝试添加FilterGrayToGray.cs代码,但我得到了win32.memcpy的错误 错误显示:“win32名称在此上下文中不存在” 如果我们将Win32.memcpy转换为Microsoft.Win32.memcpy,则会显示“名称空间中不存在memcpy”memcpy不是.NET Framework的一部分-memcpy是需要创建p/Invoke定义的非托管本机API。memcpy的定义必须位于不同的文件中 请参见下面的示例: //
如果我们将Win32.memcpy转换为Microsoft.Win32.memcpy,则会显示“名称空间中不存在memcpy”
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 );
}
}
//
///Windows API函数和结构。
///
内部静态类Win32
{
///
///复制一块内存。
///
///
///目标指针。
///源指针。
///要复制的内存块的长度。
///
///Return是指向目标的dst指针的值。
///
[DllImport(“ntdll.dll”,CallingConvention=CallingConvention.Cdecl)]
公共静态外部IntPtr memcpy(
IntPtr dst,
IntPtr src,
UIntPtr计数);
}
}
这个问题很少受到关注的原因是,在问题中或链接页面中很难找到对memcpy
的任何引用。请添加未编译的代码,这样很容易修复。这对于memcpy
来说是一个糟糕的定义。什么时候int
可以表示指针?那么从什么时候起,int
对于size\u t
来说是合理的呢?@David Heffernan:对于size\u t,什么是合理的?乌因特?我不会说这很糟糕。可以改进吗?当然顺便说一句,这个定义有一个明显的优点,就是可以确保与使用它的代码兼容——它们来自同一个项目。@DavidHeffernan-Updated-我只是剪切并粘贴了这个示例,没有仔细查看它是否正确。