C# 获取托管结构的地址
(我正在用C#编写代码) 我想通过API传递指向结构的指针。 说结构是,C# 获取托管结构的地址,c#,pointers,structure,C#,Pointers,Structure,(我正在用C#编写代码) 我想通过API传递指向结构的指针。 说结构是, [StructLayout(LayoutKind.Sequential,CharSet= CharSet.Ansi)] public struct PassThisStruct { public Int32 Param1; public Int32 Param2; [MarshalAs(UnmanagedType.ByValArr
[StructLayout(LayoutKind.Sequential,CharSet= CharSet.Ansi)]
public struct PassThisStruct
{
public Int32 Param1;
public Int32 Param2;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=13)]
public Char[] OutputData;
};
现在API声明是:-
unsafe public delegate Int32 MyAPI(Int16 Something, PassThisStruct* StructPtr);
i、 我想把结构指针传递给结构
我为这个API做了一个委托,然后从DLL中检索地址并将其存储在函数指针中。
但当我尝试编译时,它在委托声明中给了我错误,“无法获取托管空间的地址、大小或声明指向托管空间的指针”
那么应该如何传递指针呢?
我知道我可以使用“REF”,但是这个API是用C++编写的,它需要一个结构指针。若我使用ref,我就不能传递Null,而且我也会得到错误“AccessViolationException”(这对我来说是一个更大的问题!)。因此,只有当我能够摆脱AccessViolationException时,我才会使用ref
还有一个问题,在这种情况下我能传递Null吗??如果是,如何进行
问候 我看到您正在起诉常量字符数组。因此,我将把这个结构改写为:
[StructLayout(LayoutKind.Sequential,CharSet= CharSet.Ansi)]
public unsafe struct PassThisStruct
{
public Int32 Param1;
public Int32 Param2;
public fixed char OutputData[3];
};
(一)
然后我将使用IntPtr ptr=Marshal.StructureToPtr(…)
(二)
我没有试过,但我认为你可以:
unsafe void MyMethod()
{
PassThisStruct s = new PassThisStruct();
PassThisStruct* sPtr = (PassThisStruct*)s;
myAPI(12, sPtr);
}
我知道你在起诉常量字符数组。因此,我将把这个结构改写为:
[StructLayout(LayoutKind.Sequential,CharSet= CharSet.Ansi)]
public unsafe struct PassThisStruct
{
public Int32 Param1;
public Int32 Param2;
public fixed char OutputData[3];
};
(一)
然后我将使用IntPtr ptr=Marshal.StructureToPtr(…)
(二)
我没有试过,但我认为你可以:
unsafe void MyMethod()
{
PassThisStruct s = new PassThisStruct();
PassThisStruct* sPtr = (PassThisStruct*)s;
myAPI(12, sPtr);
}
我关于“AccessViolationException”的问题:我不明白你为什么会出现这个错误。没有使用“托管”类型。可能是
ByValArray
引起了问题。还要确保结构
是固定的
或局部变量。您所说的委托声明
是什么意思?我在你的代码中没有看到这样的东西。我的坏。。。。API声明为委托(已更正)。我可以理解“还要确保结构是固定的或是局部变量”我关于“AccessViolationException”的问题:我不明白为什么你会出现这个错误。没有使用“托管”类型。可能是ByValArray
引起了问题。还要确保结构
是固定的
或局部变量。您所说的委托声明
是什么意思?我在你的代码中没有看到这样的东西。我的坏。。。。API声明为委托(已更正)。我可以理解,“还要确保结构是固定的或是局部变量”