struct A
{
int a;
int b;
xxx c;
}
C++介面: void XXX(A a[])
對應到C#里 void XXX(ref A)
應該如何將引數傳入?
uj5u.com熱心網友回復:
C++介面是供應商提供的,無法更改,重新在C++上封裝一層太麻煩(有幾百個函式)uj5u.com熱心網友回復:
c#和c寫法是一樣的,只不過c傳陣列都要加個引數指定陣列的大小吧關鍵是c和c#結構要完全對應的上,比如位元組對齊,資料大小等等
uj5u.com熱心網友回復:
給你一個參考結構,定義好字串型別的長度就ok了.byte陣列也可以約定好長度的.
/// <summary>
/// 投資者
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct CThostFtdcInvestorField
{
/// <summary>
/// 投資者代碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=13)]
public string InvestorID;
/// <summary>
/// 經紀公司代碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=11)]
public string BrokerID;
/// <summary>
/// 投資者分組代碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=13)]
public string InvestorGroupID;
/// <summary>
/// 投資者名稱
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=81)]
public string InvestorName;
/// <summary>
/// 證件型別
/// </summary>
public TThostFtdcIdCardTypeType IdentifiedCardType;
/// <summary>
/// 證件號碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=51)]
public string IdentifiedCardNo;
/// <summary>
/// 是否活躍
/// </summary>
public int IsActive;
/// <summary>
/// 聯系電話
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=41)]
public string Telephone;
/// <summary>
/// 通訊地址
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=101)]
public string Address;
/// <summary>
/// 開戶日期
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=9)]
public string OpenDate;
/// <summary>
/// 手機
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=41)]
public string Mobile;
/// <summary>
/// 手續費率模板代碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=13)]
public string CommModelID;
/// <summary>
/// 保證金率模板代碼
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=13)]
public string MarginModelID;
}
uj5u.com熱心網友回復:
如果,用c++寫,c#呼叫 考慮32 位64不同的呼叫方式,沒聽說過 c++寫一個,c# 寫一個 xxx()對應什么鬼uj5u.com熱心網友回復:
定義一個和C++等效的結構體AA,
AA[] aa=。。。
XXX(ref aa);
其他,可以搜索:C# 呼叫C++函式
uj5u.com熱心網友回復:
我說的不是結構體的定義,比如結構體的名字是A,那么C++中采用 A a[]這樣的寫法,對應到C#里則是 ref A a,陣列根本就傳不進去。
uj5u.com熱心網友回復:
那么比如C++介面是 void Function(int a[]),在C#中你應該怎么匯入?
uj5u.com熱心網友回復:
1.void XXX(A a[])一般來說,傳入陣列首地址,還需要傳入結構體陣列的長度。
2.c#呼叫c++ api
結構體對應定義,要逐一確定
LayoutKind.Sequential及三種附加欄位:CharSet、Pack、Size。
其中任何一項對應不上就會導致資料讀寫例外。
uj5u.com熱心網友回復:
陣列長度有傳入的,但是我傳入陣列首地址會導致只有第一個陣列生效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/138695.html
標籤:C#
上一篇:C# ,兩個軟體同時連一個設備,一個軟體能否呼叫另一個軟體的類
下一篇:一道c#的填空題
