Я пытаюсь узнать достаточно C#, чтобы передать strcture по ссылке на C DLL; но он никогда не попадает в «cFunction». Как вы видите в cFunction, я явно устанавливаю значение streamSubset равным 44; но в части C# он не возвращает «44». Вот код C:Передача структуры из C# в C dll
typedef struct s_mPlot
{
double price[100];
int streamSubset;
} mPlot;
extern "C" __declspec(dllexport)
void cFunction(mPlot *Mplot){
Mplot->streamSubset = 44;}
// и здесь C# код
using System;
using Vibe.Function;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public class MPLOT
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public double [] price;
public int streamSubset;
}
namespace Vibe.Indicator{
public class myIdx : IndicatorObject {
[DllImport("C:\\Users\\joe\\mcDll.dll", CharSet = CharSet.Auto)]
public static extern void cFunction(
[In, MarshalAs(UnmanagedType.LPStruct)] MPLOT mPlot);
public myIdx(object _ctx):base(_ctx){}
private IPlotObject plot1;
protected override void Create()
{
MPLOT mPlot = new MPLOT();
mPlot.streamSubset = 2;
cFunction(mPlot);
if (mPlot.streamSubset == 44)
go();
}
}
}
Просьба представить более подробную информацию - то, что вы видите вместо этого? Сбой? Неожиданные результаты? Неверные данные? Вы пробовали отлаживать его? – reuben
Код C# не может работать с использованием отладчика. Длительное объяснение, но это коммерческий продукт, который его предотвращает. – PaeneInsula