Discussion de l'article "Exposer le code C# à MQL5 à l'aide d'exportations non gérées" - page 5

 
D'après ce que j'ai compris, le modèle UnmanagedExportLibrary de RGiesecke utilise à certains endroits des commentaires tels que // Code pour l'analyse des fichiers IL. Les Windows-ers russophones y insèrent des commentaires russes comme // Size, et c'est pourquoi son modèle ne fonctionne pas. Il n'y a tout simplement pas de fonctions dans la DLL et c'est la raison pour laquelle l'erreur 127 est déclenchée. C'est dommage, pour ce modèle seulement, je ne veux pas changer le langage d'interface de Windows, même s'il fonctionne assez bien et semble correct, au moins les DLL sont déchargées. Microsoft est aussi un balai, vous pouvez facilement transférer des données de C++ à C#, mais l'inverse est un gros problème.
 

Je suis sur un 64 win 8.

Je l'ai compilé avec vs2013.

Cependant, il se charge, mais il y a un appel de fonction d'importation non résolu.

Comment puis-je résoudre ce problème ?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) unresolved import function call

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) Impossible de trouver 'Add' dans 'Testme.dll'.

 

2011.10.29 20:13:37    2000.01.03 00:00  Expert_NN_1_1 USDJPY,H1: cannot call function 'sum' from dll 'NN 1 DLL.dll' (error 127)

Bonjour,

J'obtiens des erreurs similaires. Comment l'avez-vous résolu ?....

2014.03.28 22:16:41.199 2014.03.25 23:59 unresolved import function call

2014.03.28 22:16:41.199 2014.03.25 23:59 Cannot find 'Set2DArray' in 'Testme.dll'

 
ANG3110:
Si je comprends bien le modèle RGiesecke UnmanagedExportLibrary...

Ce message a été laissé il y a plus de six mois. Y a-t-il eu des changements depuis lors ? ? ???

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Quelqu'un a réussi à faire fonctionner la fonction ReplaceString ? toutes les fonctions font leur travail, sauf celle-ci, des idées ?
 

Première méthode :

J'ai 64 win 7, vs2012 C#. J'ai téléchargé le fichier modèle testme.zip du propriétaire.

Au milieu de l'invite quelques erreurs (mauvais chemin, fichiers manquants, etc. et ainsi de suite), a été résolu.

Mais à la fin, toujours apparaître et et en haut le même problème. Je ne sais pas s'il est résolu maintenant ? Quelle méthode pour le résoudre.



Deuxième méthode :

NuGet a installé le paquet RGiesecke.

https://www.nuget.org/packages/UnmanagedExports/1.2.6

La dernière version de 201311 affiche

Erreur 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error : syntax error at token '{ ' dans : {
dllTest



Unmanaged Exports (DllExport for .Net)
Unmanaged Exports (DllExport for .Net)
  • www.nuget.org
A set of compile-time libraries (nothing to deploy) and a build task that enable you to export functions from managed code to native applications. That means, you can create plugins in a managed language like C# or F# for native applications that only have a C-Api (like Notepad++). The nuget package is all you need. Just mark your methods with [DllExport] and build for x86, x64 or ia64. Hints: - You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions. - The export name defaults to the method name and the calling convention to stdcall. If that's all what you want, you can just use [DllExport] without parameters. - You cannot put your exports in generic types or export generic methods. (The CLR wouldn't know what type parameters to use)
[Supprimé]  

Vous pouvez utiliser C++ stripper avec l'aide d'IJW, et ensuite fusionner le tout en une seule DLL purement au moyen du compilateur - linker, les perversions avec le modèle décrit dans l'article ne sont pas nécessaires, décrites brièvement ici - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.

Bien, et la méthode décrite avec le modèle RGiesecke - c'est un hack et un tel tôt ou tard cesse de fonctionner, je, soit dit en passant, n'a pas fonctionné non plus ...

Mais si quelqu'un veut toujours jouer avec la méthode IL décrite dans l'article, il y a un autre vélo, mais il ne fonctionne pas non plus - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.

Include managed C# DLL into unmanaged C++ DLL - all in one single file
Include managed C# DLL into unmanaged C++ DLL - all in one single file
  • stackoverflow.com
In comparison to the question above i need to combine DLLs so that final mixed DLL could export their functions to other unmanaged applications. For this i would like to compile them both as .netmodule and then combine them into one file with a linker so i have : 1) Libs - project with some library in C# - it does not have any dependencies...
 

Bonjour,

J'ai eu un problème avec une structure avec des variables de type string à l'intérieur de la dll.

J'ai pu envoyer des int, double, float, mais pour les variables de type string, j'obtiens cette erreur :

Access violation read to 0x0000007B

Voici ma structure C# :

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// public String server ;
            public int account;
// public String user ;

            public double balance;
            public Double credit;
// public String currency ;
            public int leverage;
            public int stopout;
            public int stopoutmode;
            public float commission;
            public int lotsize;
            public float minlot;
            public float lotstep;
            public float maxlot;
            public float gmtOffset;

// public String pair ;
            public int digits;
            public int point;
            public int tradeAllowed;
            public int swaptype;
            public float swapbuy;
            public float swapsell;
            public int stoplevel;
        };

Et voici la structure mql4 :

   struct accInfo
   {
      string   broker;
// string server ;
      int      account;
// string user ;
      
      double   balance;
      double   credit;
// chaîne de devise ;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// paire de chaînes ;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

J'ai essayé de marshaller la variable string à l'intérieur de la structure mais MT4 se plante complètement, pas d'erreur juste un blocage et un écrasement dans windows.

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string broker;
...

Je vous remercie.

Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
  • www.mql5.com
I also provided several examples on how to marshal MQL5 structures against C# and how to invoke exported DLL functions in MQL5 scripts. - Page 2 - Category: articles, library comments
 
Renat Fatkhullin:

Oui, dans quelque temps nous écrirons un nouvel article sur l'utilisation des DLL. Beaucoup de choses intéressantes y ont été ajoutées.

En attendant, vous pouvez utiliser les exemples de l'article en question. Il n'y a rien de compliqué.

Et ... Combien de temps faut-il encore attendre ? Un an, deux... ou 10 ans ?

Cela fait déjà 3 ans. D'après l'article mentionné au tout début, il n'est pas possible d'importer des méthodes à partir de dll. Où sont les exemples ?

 

Merci beaucoup pour cet article. J'ai utilisé les idées présentées ici pour construire cette bibliothèque MQL opensource pour C#.

https://github.com/jseparovic/MQL4CSharp

Elle est encore en cours de développement et n'a pas encore été testée, mais les premiers tests montrent que l'idée fonctionne.

Elle est très basique dans sa façon d'envoyer des commandes à partir de C#, en utilisant un Thread pour le code C# à exécuter, et des getters/setters pour la communication. MQL interroge les commandes en attente toutes les millisecondes, tandis que le code C# peut se bloquer jusqu'à ce que le résultat soit écrit.

Consultez le site https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs pour un exemple de mise en œuvre d'une stratégie en C#.

Merci beaucoup,

Jason