Я работаю над приложением C #, которое пытается использовать функциональность, предоставляемую через C ++ DLL. Я испытываю трудности с получением определений DLLImport, которые работают в данный момент.
Вот часть уравнения C ++:
struct Result
{
FLOAT first;
FLOAT second;
};
struct ResultData
{
UINT uint1;
UINT uint2;
Result result;
Result* pResults;
};
#define DllImport __declspec(dllimport)
extern "C"
{
DllImport HRESULT APIENTRY Process(const PCWSTR FileName, const PCWSTR logfileFileName, const PCWSTR DataFileName, ResultData** ppResults);
DllImport HRESULT APIENTRY Release(ResultData* pResults);
}
На стороне C # вот что я сделал до сих пор:
[StructLayout(LayoutKind.Sequential)]
public struct Result
{
public float first;
public float second;
}
[StructLayout(LayoutKind.Sequential)]
public struct ResultData
{
public uint uint1;
public uint uint2;
public Result result;
public Result[] Results;
}
DllImport("MyDLL.dll")]
static extern uint Release(ResultData pResults);
[DllImport("MyDLL.dll")]
static extern uint Process(string FileName, string logfileFileName, string DataFileName, ref ResultData ppResults);
Это правильный способ сделать это? Больше всего меня беспокоит то, что pResults является членом структуры ResultData. Я не хочу, чтобы это копировалось по значению, поскольку это будет большой объем данных, и я не хочу дублировать память ... как я могу убедиться, что этого не произойдет?
Я ценю вашу помощь.