#property copyright "FXおもしろ研究所"
#property version   "1.00"
#property description "MQL5から.NET DLLの静的関数を呼ぶ最小デモ。発注なし。"

#import "DotNetFunctionDemo.dll"
#import

void SetPanelLine(const string name,const int row,const string text,const color ink)
  {
   if(ObjectFind(0,name)<0)
      ObjectCreate(0,name,OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,24);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,26+row*32);
   ObjectSetInteger(0,name,OBJPROP_COLOR,ink);
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,18);
   ObjectSetString(0,name,OBJPROP_FONT,"Consolas");
   ObjectSetString(0,name,OBJPROP_TEXT,text);
  }

int OnInit()
  {
   const int left=17;
   const int right=25;
   const double value=1.25;
   const double factor=4.0;
   const int sum=DotNetFunctions::Add(left,right);
   const double scaled=DotNetFunctions::Scale(value,factor);
   const bool verified=(sum==42 && MathAbs(scaled-5.0)<1e-12);

   string status=verified ? "PASS" : "FAIL";
   SetPanelLine("DOTNET108_TITLE",0,".NET DLL FUNCTION DEMO",clrWhite);
   SetPanelLine("DOTNET108_ADD",1,"Add(17, 25) = "+IntegerToString(sum),clrLime);
   SetPanelLine("DOTNET108_SCALE",2,"Scale(1.25, 4.0) = "+DoubleToString(scaled,2),clrLime);
   SetPanelLine("DOTNET108_EXPECT",3,"Expected: 42 / 5.00",clrSilver);
   SetPanelLine("DOTNET108_RESULT",4,"Result: "+status+" | NO ORDERS",verified ? clrLime : clrTomato);
   PrintFormat("DOTNET_FUNCTION_DEMO left=%d right=%d sum=%d value=%.2f factor=%.2f scaled=%.2f verified=%s",
               left,right,sum,value,factor,scaled,verified ? "true" : "false");
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"DOTNET108_");
  }

void OnTick()
  {
  }
