Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows放大API、.NET和矩阵_.net_C++_Matrix_Memset_Magnification Api - Fatal编程技术网

Windows放大API、.NET和矩阵

Windows放大API、.NET和矩阵,.net,c++,matrix,memset,magnification-api,.net,C++,Matrix,Memset,Magnification Api,我正在尝试使用Windows放大API在.net中创建一个放大镜应用程序。除了实际设置放大率(默认为100%)之外,我几乎什么都做得很好。问题是,我找不到任何地方的例子在网络上,所有的文件API是C++代码。这是我遇到麻烦的特殊函数 bool SetMagFactor(float magfactor) { MAGTRANSFORM matrix; memset(&matrix, 0, sizeof(matrix)); matrix.v[0][0] = magfac

我正在尝试使用Windows放大API在.net中创建一个放大镜应用程序。除了实际设置放大率(默认为100%)之外,我几乎什么都做得很好。问题是,我找不到任何地方的例子在网络上,所有的文件API是C++代码。这是我遇到麻烦的特殊函数

bool SetMagFactor(float magfactor)
{
    MAGTRANSFORM matrix;
    memset(&matrix, 0, sizeof(matrix));
    matrix.v[0][0] = magfactor;
    matrix.v[1][1] = magfactor;
    matrix.v[2][2] = 1.0f;
    return MagSetWindowTransform(hwndMag, &matrix);  
}
MAGTRANSFORM结构定义如下:

typedef struct tagMAGTRANSFORM {
    float v[3] [3];
} MAGTRANSFORM, *PMAGTRANSFORM;
最让人困惑的是memset——我不确定它在.NET中是做什么的,或者它的等价物是什么,但同样让人困惑的是多维数组/矩阵,以及我在.NET中如何处理它


任何帮助都将不胜感激。

memset刚开始清理矩阵。您不需要在.NET中执行此操作。我认为在C#中定义结构最简单的方法是分别指定每个元素:

public struct MagTransform
{
    readonly float m00;
    readonly float m10;
    readonly float m20;
    readonly float m01;
    readonly float m11;
    readonly float m21;
    readonly float m02;
    readonly float m12;
    readonly float m22;

    public MagTransform(float magnificationFactor) : this()
    {
        m00 = magnificationFactor;
        m11 = magnificationFactor;
        m22 = 1.0f;
    }
}
您可能还需要指定布局-恐怕我对编组不太感兴趣

如您所见,我根据示例代码假设了您想要的值。会有关于未使用值的警告,但没关系


您可以使用固定的缓冲区,而不安全的代码。。。但我想我可能会使用上面的方法。基本上你只需要9个浮点数

不幸的是,当我将结构传递给MagSetWindowTransform函数时,它失败了。如果我尝试将其命名为LayoutKind.Auto和“指定的记录无法映射到托管值类”,则会出现一个奇怪的异常-“抛出System.ExecutionEngineeException”。与未指定布局相同-抛出System.ExecutionEngineeException