2016-07-13 15 views
1

Ich habe diese einfachen .DLL writtten in C#Lösung Wie kann 'mcMath.dll' [126] nicht geladen werden?

namespace mcMath 
{ 
    public class Class1 
    { 
     public static double addUp(double num1, double num2) 
     { 
      return (num1 + num2); 
     } 

    } 
} 

, wenn ich versuche zu #import diese .DLL Datei auf einen MetaTrader4 Plattform MQL4 Code, erhalte ich eine Fehlermeldung:

Cannot load 'mcMath.dll' [126] .

10:55:17.373 Expert fadi EURUSD,H4: loaded successfully 
0 10:55:17.689 Expert fadi EURUSD#,H1: loaded successfully 
3 10:55:19.224 Cannot load 'mcMath.dll' [126] 
0 10:55:19.225 fadi EURUSD,H4: initialized 
3 10:55:24.027 Cannot load 'mcMath.dll' [126] 
0 10:55:24.028 fadi EURUSD#,H1: initialized 
1 10:55:27.463 Cannot call 'mcMath.dll::addUp', 'mcMath.dll' is not loded  
1 10:55:27.494 fadi EURUSD#,H1: unresolved import function call 
0 10:55:27.522 fadi EURUSD#,H1: uninit reason 4 
0 10:55:27.538 Expert fadi EURUSD#,H1: removed 

Ich habe DLL Importe in die Plattformoptionen erlaubt.

Q1: Hat jemand das gleiche Problem?
Q2: Wie löst man es?

MQL4 Code:

#import "mcMath.dll" 
    double addUp(double number1,double number2); 
    #import 
    double number1, number2; 
    int OnInit() 
    { 
    //--- 
     number1=10.5; 
     number2=20.3; 
     double number3= addUp(number1,number2); 
     Print("the result is: " + number3); 
    //--- 
    return(INIT_SUCCEEDED); 
    } 
+0

Sind Sie p-rufenden ** McMath .dll **? Wenn ja, zeig uns deine Importaussage – MickyD

Antwort

0

A1: Nein, es gibt keine allgemeingültige Antwort auf diese Frage gültig.

A2: Lassen Sie sich eine Check-Liste von Elementen erstellen, die erfüllt werden müssen, um #import aus DLL:

  1. MetaTrader4 Terminal-Genehmigung (Import) von DLL verwenden ... PASS
  2. Position einen der DLL-Datei ... TBD
  3. ein Anruf-Signaturabgleich von DLL exportierten Funktion (en) ... TBD

aus Gründen der [2], Achten Sie immer darauf, dass Sie eine Datei mit der von Ihnen gewählten DLL in einem Ordner <TerminalDir>/MQL4/Libraries abgelegt haben.

Aus Gründen der Isolation der [3], verwenden Sie immer eine triviale, parameterlose Funktion Integrationstest und Validierung einen richtigen Rückgabewert int test_DLL_LOADED(){ return(1); } in MQL4 Code:

#import "<aDllFileNAME>"      // MQL4 pre-processor directive 
         int test_DLL_LOADED(); // DLL parameter-less signature 
         ...     //  other signatures of import'd f() 
#import          // MQL4 pre-processor directive 


int OnInit(){ 
    if (!test_DLL_LOADED()){ 
     // FAILED:        // CLOSE ALL FILE-IOs 
               // SEND SIGs/MESSAGEs TO PEERs 
               // UPDATE GLOBAL VARIABLEs 
               // LOG EVENT 
               // GET READY FOR A GRACEFUL EXIT 
      ... 
     // EXIT: 
      ExpertRemove(); 
    } 
// PASSED: PROCEED WITH A NEXT INTENDED SETUP STEP 
    ... 

}