如何将指向 C# 结构的指针传递给 C 中的方法

问题描述

我想在 c# 中使用 c++ dll。我正在使用 spring.datasource.hikari.auto-commit=false spring.datasource.auto-commit=false 来调用该方法。我无法将结构传递给方法。

我有一个 C 结构体:

[DllImport]

typedef struct { DWORD TopPoint; DWORD EndPoint; WORD dwCount; MYFUNC_NUMERIC11 *pGetData; } MYFUNC_BUFFERNORMAL; 是另一个结构体。

MYFUNC_NYMERIC11

我已经编写了一个 C# 结构来模仿这一点。

typedef struct
{
BYTE Sign; // Sign ("±")
BYTE Integer[3]; // 3-digit integer (no zero suppression)
BYTE Period; // Decimal point (".")
BYTE Decimal[6]; // 6-digit decimal number
} MYFUNC_NUMERIC11;

指向结构的指针是方法中的参数。 C#函数是:

[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Auto)]
public unsafe struct MYFUNC_BUFFERNORMAL
{
    public uint TopPoint;
    public uint EndPoint;
    public ushort Count;
    public IntPtr pGetData;
}

这是C中的方法:

[DllImport("MYFUNC_DLL.dll",EntryPoint = "MYFUNC_GetData",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall,ThrowOnUnmappableChar = true)]
public static extern int MYFUNC_GetData(IntPtr myfuncHandle,UInt32 dwIO,ref IntPtr pBufferNormal,Byte bccFlg);

返回类型被强制转换为一个枚举,它有一个解释。结构参数无效。我试过用MYFUNC_STATUS MYFUNC_GetData(MYFUNC_HANDLE myfuncHandle,DWORD dwOut,MYFUNC_BUFFERNORMAL *pBufferNormal,BYTE bccFlg) 来分配内存,但是参数仍然无效,即编译没有错误但是返回的值不正确。

我在这上面花了好几个小时,仍然无法弄清楚该怎么做。已经存在很多类似的问题,比如这里:How do I convert c struct from dll to C# 或这里:How to pass C# array to C++ and return it back to C# with additional items?,但不知何故,我仍然没有想出办法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)