Экспорт неуправляемой C# DLL (с ​​пространством имен) для MT4

У меня есть код в C#, этот код следует экспортировать как необработанный код, поскольку он будет использоваться MetaTrader Terminal 4 как #import-ed библиотека ( .dll ).

Основные вопросы:

Q1 ) Могу ли я использовать пространства имен system.net и system.net.mail для экспорта в качестве неуправляемого DLL?

Q2 )< /strong> Если нет, то какое решение для этого лучше (экспорт DLL как неуправляемый и со ссылкой на пространства имен)?

Q3 ) Почему экспорт не работает для этой функции (EnviarCorreo )?

Спасибо.

using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using System.Net;
using System.Net.Mail;
namespace Testme
{
    class Test
    {
        [DllExport("EnviarCorreo", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
        [return: MarshalAs(UnmanagedType.LPWStr)]
        public static int EnviarCorreo(string ServidorSMTP, string usuario, string pass, bool HTML, string Asunto, string Cuerpo, string Desde, string Para)
    {
        MailMessage mail = new MailMessage();
        //direccion desde
        mail.From = new MailAddress("[email protected]", "Name");
        mail.ReplyTo = new MailAddress("[email protected]");
        MailAddress toa = new MailAddress("[email protected]");

        string contenido = "Aquí vamos a escribir en HTML <br>Para ver</br>";
        mail.BodyEncoding = Encoding.Unicode;
        mail.SubjectEncoding = Encoding.Unicode;
        mail.To.Clear();
        mail.To.Add(toa);
        mail.Subject = "PRUEBA DE CORREO";
        mail.Body = contenido;// +Constants.vbCr + Constants.vbLf;
        mail.IsBodyHtml = true;
        SmtpClient smtp = new SmtpClient("mail.domain.com");
        smtp.Credentials = new NetworkCredential("[email protected]", "blabla");
        smtp.Send(mail);
        return 158;
    }

        [DllExport("Add", CallingConvention = CallingConvention.StdCall)]
        public static int Add(int left, int right)
        {
            return left + right;
        }

        [DllExport("Sub", CallingConvention = CallingConvention.StdCall)]
        public static int Sub(int left, int right)
        {
            return left - right;
        }

        [DllExport("AddDouble", CallingConvention = CallingConvention.StdCall)]
        public static double AddDouble(double left, double right)
        {
            return left + right;
        }

        [DllExport("AddFloat", CallingConvention = CallingConvention.StdCall)]
        public static float AddFloat(float left, float right)
        {
            return left + right;
        }

    }
}

person CRNMC    schedule 18.05.2016    source источник
comment
Export doesnt work не является хорошим объяснением. Пожалуйста, дополните.   -  person GSerg    schedule 18.05.2016
comment
Также вы должны точно указать, что такое ваш DllExport. Это не стандарт, и это может быть это или что-то еще.   -  person GSerg    schedule 18.05.2016
comment
1: Да. 2: N/A 3: вы не знаете, потому что никто не перехватывает исключение, когда CLR не может найти вашу dll, или marshaller отказывается от вашего неверного объявления, или метод выдает исключение. Вам придется изменить тип отладчика с автоматического на смешанный, чтобы вы могли, по крайней мере, диагностировать самые основные сбои. И используйте try/catch-em-all в своем коде, чтобы вы могли вернуть код ошибки.   -  person Hans Passant    schedule 18.05.2016
comment
Привет Ганс, о 1: Да, вы знаете, как я могу это сделать (связанное пространство имен при экспорте в виде неуправляемой DLL)? Вы правы, я добавляю try-catch, чтобы увидеть любую ошибку, потому что на данный момент у меня нет никакой ошибки, и это очень странно, потому что это не работает.   -  person CRNMC    schedule 18.05.2016


Ответы (1)


.Net — это управляемый язык, поэтому вы не можете просто создать неуправляемую dll. Это немного сложнее, так как ваша dll зависит от фреймворка. Есть способы сделать это, но они требуют немного работы. Посмотрите ответы на этот пост.

https://social.msdn.microsoft.com/Forums/en-US/afb244b3-1cd4-48b4-93ba-f019fdce6a8e/creating-an-unmanaged-dll-in-c?forum=csharplanguage

person bhmahler    schedule 18.05.2016
comment
Привет, большой вопрос: могу ли я экспортировать управляемую функцию в неуправляемый код, если у меня есть пространство имен из Framework? У вас есть другие советы? - person CRNMC; 19.05.2016