gpt4 book ai didi

将 C 函数和 DLL 结构类型正确转换/编码为 C#

转载 作者:行者123 更新时间:2023-11-30 20:28:22 26 4
gpt4 key购买 nike

有人可以帮我将 C 结构/函数转换为 C# 吗?

我相信,如果我能够正确转换函数并正确编码我的结构,我就可以正确调用 DLL。

这是我的结构和使用它的函数:

typedef struct UIclient_info {
char name[50];
int age;
SECONDUSER *stParent;
} FIRSTUSER;

typedef struct ui_product_form {
char m_sCoupon;
double amountTotal;
char m_sErrorCode[50];
SUBPRODUCT *pstSubProduct;
} PRODUCT;

typedef struct tagReport
{
REPORTSUMMARY *pstRepsum;
char errorMsg[100];
} FINAL_REPORT;

int Save(FIRSTUSER *myUser, PRODUCT *uiStructure);
FINAL_REPORT GenerateReport(FIRSTUSER *myUser, PRODUCT *uiStructure);

最佳答案

这可能有效,也可能无效。你可以试试,我不知道我是否正确处理了指针。我无法就此提供任何其他支持。如果它有效,那么它就有效。如果没有的话...哦好吧。

//typedef struct UIclient_info {
// char name[50];
// int age;
// SECONDUSER *stParent;
//} FIRSTUSER;

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct FirstUser
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=50)]
public string Name;
public int Age;
[MarshalAs(UnmanagedType.LPStruct)]
public IntPtr Parent;
}

//typedef struct ui_product_form {
// char m_sCoupon;
// double amountTotal;
// char m_sErrorCode[50];
// SUBPRODUCT *pstSubProduct;
//} PRODUCT;

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct Product
{
public char Coupon;
public double AmountTotal;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=50)]
public string ErrorCode;
[MarshalAs(UnmanagedType.LPStruct)]
public IntPtr SubProduct;
}

//typedef struct tagReport
//{
// REPORTSUMMARY *pstRepsum;
// char errorMsg[100];
//} FINAL_REPORT;

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct FinalReport
{
[MarshalAs(UnmanagedType.LPStruct)]
public IntPtr ReportSummary;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=100)]
public string ErrorMsg;
}

static class MyLibraryHelper
{
//int Save(FIRSTUSER *myUser, PRODUCT *uiStructure);

[DllImport(@"MyLibrary.dll", CharSet=CharSet.Ansi)]
internal static extern int Save(IntPtr myUser, IntPtr uiStructure);

//FINAL_REPORT GenerateReport(FIRSTUSER *myUser, PRODUCT *uiStructure);

[DllImport(@"MyLibrary.dll", CharSet=CharSet.Ansi)]
internal static extern FinalReport GenerateReport(IntPtr myUser, IntPtr uiStructure);
}

关于将 C 函数和 DLL 结构类型正确转换/编码为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831148/

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