C#调用C导出的带定长变量结构体函数

C定义

typedef struct CASH
{
    int CashNumber;
    CURRENCYTYPE Types[24];
} CASHTYPE; 

typedef struct CURRENCY
{
    char Name[2];
    char NoteType[6];
    int NoteNumber;
} CURRENCYTYPE;

typedef CASHTYPE* CASHTYPEPOINTER;

int APIENTRY GetData (CASHTYPEPOINTER cashData);

C#定义

using System;
using System.Runtime.InteropServices;

public static class MyCApi
{
    [StructLayout(LayoutKind.Sequential)]
    public struct CASHTYPE
    {
        public int CashNumber;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
        public CURRENCYTYPE[] Types;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct CURRENCYTYPE
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
        public string Name;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string NoteType;
        public int NoteNumber;
    }

    [DllImport("MyCApi.dll")]
    public static extern int GetData(ref CASHTYPE cashData);
}

引用

https://stackoverflow.com/questions/1502526/using-p-invoke-to-call-a-function-from-a-c-api

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值