Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 08:28
Оценка:
Вопрос спицифический, пишу сразу. ИМХО не простой.

Есть некая программа — http://www.fxcm.com/lp-strategy-trader-beta.html

Это как видно пока бетта.

Это программа имеет встроенный язык, и этот язык есть C#

Вот пример

using System;
using System.Drawing;
using Broker.StrategyLanguage.Function.BuiltIn;
using Fx2GoCommon;

namespace Broker.StrategyLanguage.Indicator{
    public class Test22 : BaseIndicator {

        

        public Test22(object _ctx):base(_ctx){}
        private IPlot plot1;
        protected override void Construct() {
            // TODO : create all members here 
            plot1 = AddPlot(new PlotInfo("", PlotType.Line, Color.Red));
        }
        protected override void Initialize() {
            // TODO : assign inputs here 
        }
        protected override void Execute(){
            // TODO : implement indicator logic here 
            plot1.Set(Bars.Close[0]);
        }
    }
}


Но не имеет отладчика и возможность сохранить даже этот код в виде текста. Если кому вдруг интересно — посмотрите это тестер стратеий для бирж. От самого большого "брокера" FXCM.

Ну вот а мне надо типа отлаживать этот С# -вый код и ЕЩЕ прилинковать к нему библиотеку написанную на С++ , на нейтив.

Разработчики пока молчат как партизаны — но понятно ветта вышла вот только-только. А мне надо понять подходит мне именно эта программа или нет. У них есть еще много разных. Но на взгляд эта именно то что мне нужно, но только с отладкой и импортом.

Банальная вставка для проверки вот этого кода

[DllImport("coredll.dll", SetLastError = true)]
public static  extern bool CloseHandle(IntPtr hObject);


Выдает ошибку —


Ожидался класс, делегат, перечисление, интерфейс или структура "Test22" [Indicator] Ln 7
Недопустимый для этого элемента модификатор "extern" "Test22" [Indicator] Ln 6


Подскажите кто знает.
Я думаю многим будет интересно , я знаю что многие балуются атоматизацией для торгов.
Re: Как можно импортировать в C# код на naitive С++
От: _FRED_ Черногория
Дата: 02.07.10 08:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Банальная вставка для проверки вот этого кода

А>[DllImport("coredll.dll", SetLastError = true)]
А>public static  extern bool CloseHandle(IntPtr hObject);

А>Выдает ошибку —

А>Ожидался класс, делегат, перечисление, интерфейс или структура "Test22" [Indicator] Ln 7
А>Недопустимый для этого элемента модификатор "extern" "Test22" [Indicator] Ln 6

А>Подскажите кто знает.

Объявление метода нужно добавлять "внутрь" класса. А где оно у вас? Почему не показано?

А>Я думаю многим будет интересно , я знаю что многие балуются атоматизацией для торгов.


К автоматизации торгов данный вопрос отношения не имеет никакого. Бросьте рекламой заниматься.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 08:55
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Аноним, Вы писали:


А>>Банальная вставка для проверки вот этого кода

_FR>
А>>[DllImport("coredll.dll", SetLastError = true)]
А>>public static  extern bool CloseHandle(IntPtr hObject);
_FR>

А>>Выдает ошибку —
_FR>

А>>Ожидался класс, делегат, перечисление, интерфейс или структура "Test22" [Indicator] Ln 7
А>>Недопустимый для этого элемента модификатор "extern" "Test22" [Indicator] Ln 6

А>>Подскажите кто знает.

_FR>Объявление метода нужно добавлять "внутрь" класса. А где оно у вас? Почему не показано?


Делал по разному.

И вот так тоже

using System;
using System.Drawing;
using Broker.StrategyLanguage.Function.BuiltIn;
using Fx2GoCommon;

namespace Broker.StrategyLanguage.Indicator{
    
    public class Test22 : BaseIndicator {
    
        [DllImport("coredll.dll", SetLastError = true)]
        public static  extern bool CloseHandle(IntPtr hObject);    
        

        public Test22(object _ctx):base(_ctx){}
        private IPlot plot1;
        protected override void Construct() {
            // TODO : create all members here 
            plot1 = AddPlot(new PlotInfo("", PlotType.Line, Color.Red));
        }
        protected override void Initialize() {
            // TODO : assign inputs here 
        }
        protected override void Execute(){
            // TODO : implement indicator logic here 
            plot1.Set(Bars.Close[0]);
        }
    }
}


выдает


Не удалось найти имя типа или пространства имен "DllImport" (пропущена директива using или ссылка на сборку?) "Test22" [Indicator] Ln 12


Я честно говоря уже C# подзабыл, подскажите, пожет все действительно банально.

А>>Я думаю многим будет интересно , я знаю что многие балуются атоматизацией для торгов.


_FR>К автоматизации торгов данный вопрос отношения не имеет никакого. Бросьте рекламой заниматься.


Нет, какая руклама, я действительно знаю что многие этим занимаются, и то что этот монстр FXCM выпустил такую ИНТЕРЕСНУЮ прогу, это на самом деле интересная новость. И даже более того я боюсь что если все начнут регистрировать и скачитвать эти бетту, прием мемтеров могут прекратить.

Да и у них на сайте этой ссылки просто так нет. Это действительно не раклама. И поверьте многим действительно эта новость будет интерсна.

Так что это скорее слив инфы, в тихую от FXCM чем реклама. Поверьте.

Так что это
Re: Как можно импортировать в C# код на naitive С++
От: a-belich Россия  
Дата: 02.07.10 09:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос спицифический, пишу сразу. ИМХО не простой.


using System.Runtime.InteropServices;
Re[3]: Как можно импортировать в C# код на naitive С++
От: _FRED_ Черногория
Дата: 02.07.10 09:26
Оценка:
Здравствуйте, Аноним, Вы писали:

_FR>>Объявление метода нужно добавлять "внутрь" класса. А где оно у вас? Почему не показано?

А>Делал по разному.
А>И вот так тоже
А>выдает

А>Не удалось найти имя типа или пространства имен "DllImport" (пропущена директива using или ссылка на сборку?) "Test22" [Indicator] Ln 12

А>Я честно говоря уже C# подзабыл, подскажите, пожет все действительно банально.

Поищите в MSDN описание типа DllImportAttribute и добавьте using на пространстов имён, в котором DllImportAttribute объявлен.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 09:28
Оценка:
Здравствуйте, a-belich, Вы писали:

AB>Здравствуйте, Аноним, Вы писали:


А>>Вопрос спицифический, пишу сразу. ИМХО не простой.


AB>using System.Runtime.InteropServices;


Дело в том что это тестер, а тестер это такая программа которая на иторических данных симулирует реальную торговлю как бы это было бы. Ну то есть отматывает время назад и торогая программа ( робот ) торгует на бирже ( или форексе ) как бы в прошлом. Таким образом можно отлаживать роботов и проверять стратегии торговли. Понято что этот процесс должен идти как можно быстрее, а иначе смысл симуляции пропадает, так как по сути получается почти как в рельном времени. Поэтому надо чтобы эти роботы работали быстро, и там достаточно большие обьемы данных ходят. Поэтому обмениваться данными через межпроцессное взаимодействие будет плохо.

Ну а вообще как они смогли такое сделать, компилятора как такого у них нет, радактор тоже похоже от C#. Что-то не верится что при такой схеме никак нельзя выкрутится.
Re[3]: Как можно импортировать в C# код на naitive С++
От: a-belich Россия  
Дата: 02.07.10 09:32
Оценка:
Здравствуйте, Аноним, Вы писали:

В этом namespace-е находится DllImport. Как вы представляете себе вызов unmanaged функций из managed "приложения" без такого взаимодействия?
Re[2]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 09:33
Оценка:
Здравствуйте, a-belich, Вы писали:

А>>Вопрос спицифический, пишу сразу. ИМХО не простой.


AB>using System.Runtime.InteropServices;


Да, похоже это оно , а я протупил , думал что это Вы про межпроцесное ...
Re[4]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 09:39
Оценка:
Здравствуйте, a-belich, Вы писали:

AB>Здравствуйте, Аноним, Вы писали:


AB>В этом namespace-е находится DllImport. Как вы представляете себе вызов unmanaged функций из managed "приложения" без такого взаимодействия?


Yes! Все работает!

Спасибо Вам и Fred'у

---

Отлично с этим разобрался, а как отлаживать? Что неужели никак к судии не прицепить?
Хотя если сделать внешнюю управляемую дллку, ... Ну буду думать. Спасибо.

--- Но вообще как их редактор заменить на студию? Как они вообще все это соорудили? Просто накидайте идей, я попробую дальше сам уже разобраться.
Re[5]: Как можно импортировать в C# код на naitive С++
От: _FRED_ Черногория
Дата: 02.07.10 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Отлично с этим разобрался, а как отлаживать? Что неужели никак к судии не прицепить?

А>Хотя если сделать внешнюю управляемую дллку, ... Ну буду думать. Спасибо.

Вариант раз: Написать в методе Debugger.Break(); — при выполнении попросят подключить отладчик.
Вариант два: из студии выбрать Debug\Attach to Process…
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Как можно импортировать в C# код на naitive С++
От: a-belich Россия  
Дата: 02.07.10 09:57
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Вариант раз: Написать в методе Debugger.Break(); — при выполнении попросят подключить отладчик.

_FR>Вариант два: из студии выбрать Debug\Attach to Process…

А это сработает совместно с run-time компиляцией скриптов?
Re[7]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 10:21
Оценка:
Здравствуйте, a-belich, Вы писали:

AB>А это сработает совместно с run-time компиляцией скриптов?


Yes! Брейкуется.

***
А вот бы еще бы и редактор бы заменить. Ну или на крайняк я буду просто из проекта импортировать!
Еще раз спасибо!
Re[8]: Как можно импортировать в C# код на naitive С++
От: Аноним  
Дата: 02.07.10 10:33
Оценка:
Здравствуйте, Аноним, Вы писали:


AB>>А это сработает совместно с run-time компиляцией скриптов?


А>Yes! Брейкуется.


Брейковаться то брейкуется, но после уже программа не работает — зависает. И так что просто так ее не снять. Что делать?
Re[7]: Как можно импортировать в C# код на naitive С++
От: _FRED_ Черногория
Дата: 02.07.10 11:51
Оценка:
Здравствуйте, a-belich, Вы писали:

_FR>>Вариант раз: Написать в методе Debugger.Break(); — при выполнении попросят подключить отладчик.

_FR>>Вариант два: из студии выбрать Debug\Attach to Process…

AB>А это сработает совместно с run-time компиляцией скриптов?


Что будет при компиляции неизвестно чем или при выполнении неизвестно кем мне сказать сложно.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.