Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование функции из dll, как правильно сделать? 
V
    Опции темы
jimbo
Дата 24.6.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Привет всем!

У меня есть библиотека длл, исходных кодов нет и не будет. Мне необходимо использовать буквально пару функций из нее. Там есть фабрика, которая подготавливает объект класса. Этот объект соединяется с удаленным сервером и при помощи функции GetSomething(sometype *something) получает информацию с сервера. 

Что я делаю. установил wine на комп. ubuntu 11.04. на виндовой машине создал  ехе который используя библиотеку получает нужную мне информацию и пишет в файл. сервер, логин, пароль, путь к файлу передаются этому ехе через командную строку. Создал приложение на линуксе, которое запускает ехе через вайн и потом читает файл и забирает информацию. 

Все работает, но вопрос в следующем. Можно ли сделать функцию без ехе или как-то вшить код, т.е. не ждать пока создастся файл, иначе мое приложение на линуксе будет висеть и ждать. 

Код

char *current_dir = get_current_dir_name();

string s = "wine ";
s += current_dir;//путь к ехе
s += "/GetSomething.exe "; // сам ехе
s += m_serverinformation; // заполнение данных о сервере 
s += current_dir; // путь к выходному файлу
s += filename;  // имя файла

system(s.c_str());//запускаем ехе под вайном

int cnt = 0;  //счетчик
FILE *stream = 0;
while(stream==0)  // цикл
{
     stream = fopen(filename.c_str(),"r");  // пытаемся открыть файл, если ехе его создал - откроем
     if(stream)
     {
          int a;
          fscanf(stream,"%d",&a);  // читаем инфу
          fclose(stream);   // закрываем файл
          return a;  // возвращаем данные
     }
     else
     {
          stream = 0;  // продолжаем цикл
     }
     cnt++;  // счетчик проходов
     sleep(1);  // ждемс
     if(cnt>10)  // слишком долго не ждем, возврат с ошибкой получения
           break;
}




--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
Cheloveck
Дата 24.6.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Ну так у WINE есть API, та же самая LoadLibrary там есть, больше, чем уверен.


--------------------
user posted image
PM Jabber   Вверх
afiskon
Дата 25.6.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Wine довольно производительная штука (по крайней мере в плане загрузки dll - 100%), а создание нового процесса в unix - недорогая операция (хотя в linux......?). Не заморачивайтесь. Или напишите фабрику самостоятельно, если это возможно.
PM MAIL WWW   Вверх
xvr
Дата 27.6.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(jimbo @  24.6.2011,  18:00 Найти цитируемый пост)
т.е. не ждать пока создастся файл, иначе мое приложение на линуксе будет висеть и ждать. 

Создайте файл сначала - в приложении на Linux'е. И не просто файл, а fifo (mkfifo). Из wine пишите в него, а из Linux - читайте. Тогда никто никого ждать не будет

PM MAIL   Вверх
jimbo
Дата 27.6.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



всем спасибо за ответы
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.