问题描述
我想在 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 (将#修改为@)