Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Использование функции из dll


Автор: jimbo 24.6.2011, 18:00
Привет всем!

У меня есть библиотека длл, исходных кодов нет и не будет. Мне необходимо использовать буквально пару функций из нее. Там есть фабрика, которая подготавливает объект класса. Этот объект соединяется с удаленным сервером и при помощи функции 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;
}




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

Автор: afiskon 25.6.2011, 10:02
Wine довольно производительная штука (по крайней мере в плане загрузки dll - 100%), а создание нового процесса в unix - недорогая операция (хотя в linux......?). Не заморачивайтесь. Или напишите фабрику самостоятельно, если это возможно.

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

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

Автор: jimbo 27.6.2011, 14:48
всем спасибо за ответы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)