好的,我一直试图编组一个具有C / C ++格式的等效数据结构:
Struct ResultsRecord
{
int LengthOutMD; // this contains the size for the arrays below.
float *OutMD;
float *OutAxialLoad;
float *OutNormalForce
}
这是dll文件中非托管代码中包含的函数:
typedef int (cdecl *ReadResultsTnDAnalysis) (wchar_t* ResultFileName, struct ResultsRecord* TnDResultsRecord);
现在这里是我的解决方案,暂时不起作用:因为我找不到一种简单的方法来编组指向数组初始值的指针:数组的大小是先验未知的。
public class APIforEngine
{
[DllImport("TnDAnalysisDLL.dll", EntryPoint = "ReadResultsTnDAnalysis", CallingConvention = CallingConvention.Cdecl
public static extern int ReadResultsTnDAnalysis(string resultFileName,
ref TnDResultsRecord tnDResultsRecord);, CharSet = CharSet.Auto)]
}
[StructLayout(LayoutKind.Sequential), Serializable]
public struct TnDResultsRecord
{
public int LengthOutMD;
[MarshalAs(UnmanagedType.LPArray)]
public float[] OutMD;
[MarshalAs(UnmanagedType.LPArray)]
public float[] OutAxialLoad;
[MarshalAs(UnmanagedType.LPArray)]
public float[] OutNormalForce;
}
非常感谢您的帮助。
现在我正考虑在中间C ++项目中使用dll,将数据转换为C#易于读取的内容,并在我的C#解决方案中使用它。即使是这条路线,我也要看看它是否真的可行,因为我不知道如何消费它。在本机c ++中还是使用CLR?如果我使用CLR,我是否使用InterOpServices命名空间类或使用头文件来使用它。