c# - 在 c# 中编组组成 c/c++ 结构
问题描述
我需要解决这个问题。我有结构(StructA),其中包含指向第二个结构的指针。第二个结构具有整数变量。
在下面的代码中,我有 C 过程(GetStrucure())。我想将整数值设置为 StructB 中的变量 ValB。StructA 包含指向 StructB 的指针。GetStructure() 返回 StructA。这可以正常工作。
在 C# 代码中,我想从 C dll 调用 GetStructure()。ValA 正确返回,但 ValB 返回不正确的值 3207020。为什么来自指针的值不正确?
struct StructB
{
int ValB;
};
struct StructA
{
StructB* S;
int ValA;
};
和程序:
extern "C"
{
__declspec(dllexport) StructA GetStrucure()
{
StructA sA;
StructB sB;
sB.ValB = 5;
sA.S = &sB;
sA.ValA = 6;
return sA;
}
}
和 C# 代码:
[StructLayout(LayoutKind.Sequential]
public struct StructA
{
public StructB S;
public int ValA;
}
[StructLayout(LayoutKind.Sequential)]
public struct StructB
{
[MarshalAs(UnmanagedType.I4)]
public int ValB;
}
class Program
{
[DllImport("TestLib.dll", CallingConvention = CallingConvention.Cdecl)]
static extern StructA GetStrucure();
static void Main(string[] args)
{
StructA a = GetStrucure();
}
}
我也试过
[StructLayout(LayoutKind.Sequential]
public struct StructA
{
public IntPtr S;
public int ValA;
}
和
StructB b = (StructB)Marshal.PtrToStructure(a.S, typeof(StructB));
但我得到了不同的荒谬价值......
请问有什么机构可以帮助我吗?
解决方案
推荐阅读
- c - 查找未定义的 gpio 编号的问题是树莓派 3
- proxy - 创建 React App v2 高级代理功能不起作用
- android - 根据特定用户偏好删除回收站项目
- python - 请求:来自 scipy.spatial 的 cKDTree
- javascript - Node.js:我正在努力将回调函数的结果存储到字典变量中
- ios - 在按钮目标 Swift 的选择器方法中更改两个对象
- sql - 如何在 C# 中完全外连接或连接最多 6(六)个 SQL Server 数据库表?
- swift - GIDSignInDelegate 的问题,尽管添加了符号功能,但仍无法符合它
- ios - ActionSheet 以不正确的颜色呈现
- python - 尝试使用 python 将输入与权重相乘时,张量流 lite 的输出不匹配