Похоже я был прав, когда подумал что это не так просто)
Обрабатывать этот массив в этой самой ДЛЛ, грубо говоря, в ДЛЛ функция в которую надо передать все цены клоузе с сотворения мира, многократно их там обработать и вернуть в советник результат просто одно double....
То есть сразу всю необходимую мне инфу запихиваю в С-среду и там обрабатываю. В принципе функции написаны так, что могут быть вызваны как из МКЛ, так и вызывать друг-друга в самой длл. А там уж творите, что угодно. Все работает нормально.
Можно передавать через файлы, но через файлы дольше.
Естественно, сервер обязан быть многопоточным. Проблема возникает при создании нового потока:
class Server
{public: void Method(void*params){//}}void main(){
Server* a=new Server();//Сначала писал так:
_beginthread(a->Mehod,0,NULL);//Ошибка error C3867: 'Server::AcceptIncomingSocket': function call missing argument list; use '&Server::AcceptIncomingSocket' to create a pointer to member//Попробовал как было написано. И вышло такое:
_beginthread(&Server::Method,0,a);// error C2664: cannot convert parameter 1 from 'void (__thiscall Server::* )(void *)' to 'void (__cdecl *)(void *)'}
Насколько я понимаю, ошибка в том, что методы класса - __thiscall функции, а первый параметр должен быть _cdecl ф-цией?
Если используются сишные библиотеки то рекомендуют использовать _beginthreadex.
Так же метод класса передать не удалось ни в каком виде. В итоге забил на это и передаю указатель на обычную глабальную функцию а в неё уже вызываю нужные методы классов.
Ещё с синхронизацией доступа к общим переменным и массивам стоит быть аккуратным и почитать об этом. При деклорации общих переменных (атомарный доступ) для разных потоков использую volatileи пока проблем не наблюдал. Всё работает стабильно. (например volatile int Flag; )
Так же метод класса передать не удалось ни в каком виде. В итоге забил на это и передаю указатель на обычную глабальную функцию а в неё уже вызываю нужные методы классов.
Похоже я был прав, когда подумал что это не так просто)
Обрабатывать этот массив в этой самой ДЛЛ, грубо говоря, в ДЛЛ функция в которую надо передать все цены клоузе с сотворения мира, многократно их там обработать и вернуть в советник результат просто одно double....
Я делаю так :
Функция возвращает либо количество скопированных данных, либо число < 0 в случае ошибки.В длл прописываю функцию :
Описание пременных :
То есть сразу всю необходимую мне инфу запихиваю в С-среду и там обрабатываю. В принципе функции написаны так, что могут быть вызваны как из МКЛ, так и вызывать друг-друга в самой длл. А там уж творите, что угодно. Все работает нормально.
Можно передавать через файлы, но через файлы дольше.
Успехов.
Я делаю так ....
Ух.... Мне кажется исчерпывающе, прям в раздел Статьи просится. Огромное спасибо. Буду творить)...
Ух.... Мне кажется исчерпывающе, прям в раздел Статьи просится. Огромное спасибо. Буду творить)...
Да, еще,я считал само собой разумеющимся, но лучше сразу укажу :
Описание самих массивов в МКЛ :
статик там вообще то не обязательно - они и так в хедере описаны как глобальные - просто осталось от С.
Удачи.
И снова появились проблемы с С++ =(
Пытаюсь написать клиент+серверную платформу.
Естественно, сервер обязан быть многопоточным. Проблема возникает при создании нового потока:
Насколько я понимаю, ошибка в том, что методы класса - __thiscall функции, а первый параметр должен быть _cdecl ф-цией?
Если используются сишные библиотеки то рекомендуют использовать _beginthreadex.
Так же метод класса передать не удалось ни в каком виде. В итоге забил на это и передаю указатель на обычную глабальную функцию а в неё уже вызываю нужные методы классов.
Ещё с синхронизацией доступа к общим переменным и массивам стоит быть аккуратным и почитать об этом. При деклорации общих переменных (атомарный доступ) для разных потоков использую volatileи пока проблем не наблюдал. Всё работает стабильно. (например volatile int Flag; )
Так же метод класса передать не удалось ни в каком виде. В итоге забил на это и передаю указатель на обычную глабальную функцию а в неё уже вызываю нужные методы классов.
Так и сделал, спасибо!