атрибут SizeParamIndex
означает, что n-й параметр функции (начиная с нуля, считая слева) содержит фактический размер массива.ваша функция имеет только 2 параметра, а не 127.
Более того, вы поменяли местами параметры pbTranxData
и CSTSaleInfo
в C ++ и C #.
, вы можете использовать SizeParamIndex
, чтобыфункция C ++ знает размер массива pbTranxData
:
C ++
int KTMBBiz_CSCSale(T_TK_KTMB_CSC_SALE_INFO CSCSaleInfo,
BYTE* pbTranxData, INT iLength);
C #
[DllImport("KTMBBizRule.dll")]
public static extern int KTMBBiz_CSTSale(
T_TK_KTMB_CST_SALE_INFO CSTSaleInfo,
[In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)]
byte[] pbTranxData,
int iLength);
, теперь вызывайте его с помощью KTMBBiz_CSTSale(cscSale, trxData, trxData.Length);
вы также должны добавить [StructLayout(LayoutKind.Sequential)]
перед структурой C #.
вместо public char[] szPaymentMediaID;
вы можете сказать string szPaymentMediaID
.По умолчанию строки обозначаются как char *, вы можете изменить его на UnmanagedType.ByValTStr
с заданным SizeConst
.