gpt4 book ai didi

c# - PInvoke 在类定义中不起作用

转载 作者:行者123 更新时间:2023-11-30 21:08:13 25 4
gpt4 key购买 nike

我有个问题,很奇怪。当我在 PInvoke 中使用下一个结构时,它正在工作,但是当我将它更改为类时,它不起作用。

我的 C#:

[StructLayout(LayoutKind.Sequential)]
public struct SPInvokeImage
{
public int m_BitsPerPixel; // 8,16,24,32
public int m_ImageHeight;
public int m_ImageWidth;
public int m_BytesArraySize; // array size in bytes.

public IntPtr m_pArray; //data array
}

C++

   typedef struct 
{
int mBitsPerPixel; // 8,16,24,32
int mImageHeight;
int mImageWidth;
int BytesArraySize; // array size in bytes.

uint8_t *Array; //data array
}SPInvokeImage;

当我将 C# 更改为这样时,它停止工作:

 [StructLayout(LayoutKind.Sequential)]
public class SPInvokeImage
{
public int m_BitsPerPixel; // 8,16,24,32
public int m_ImageHeight;
public int m_ImageWidth;
public int m_BytesArraySize; // array size in bytes.

public IntPtr m_pArray; //data array
}

最佳答案

这是因为当您切换到一个类时,该对象是通过引用而不是像 struct 那样通过值传递给 native 代码的。所以有一个额外的间接级别。您需要在 pinvoke 声明中删除该级别的间接访问。您现在可能正在使用 ref 传递。当您从 struct 切换到 class 时,只需删除 ref

关于c# - PInvoke 在类定义中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com