Russian Qt Forum
Ноябрь 25, 2024, 07:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание DLL  (Прочитано 6799 раз)
Resager
Гость
« : Январь 16, 2010, 21:00 »

Хочю написать DLL-ку для работы с XML файлами.

Сталкиваюсь с такими проблемами:

1) Имена функций неизвестны (поглядел в totalCMD -> F3, вроде бы она такая "_ZN8Reslib64C1Eii" и "_ZN8Reslib64C2Eii", хотя она одна у меня, но всё равно вызвать не получается)
2) Хотел проверить, вызывается ли вообще функция из библиотечки, вставил мэсичбокс, но вылетает ошибка
no matching function for call to `QMessageBox::information(Reslib64* const, const char[10], const char[2])'
Код такой:
.cpp
Код:
#include "reslib64.h"
#include "QMessageBox"

Reslib64::Reslib64(int asd, int qwe)
{
    qwe=asd+5;
    QMessageBox::information(this,"Результат", "g");
}

.h
Код:
#ifndef RESLIB64_H
#define RESLIB64_H

#include "reslib64_global.h"

class RESLIB64SHARED_EXPORT Reslib64 {
public:
    Reslib64(int asd, int qwe);
};

#endif // RESLIB64_H

Вобщем не знаю... в QT совсем недавно... и библиотеку первый раз пишу.... как избавиться и как проверить работоспособность вообще?
Записан
Resager
Гость
« Ответ #1 : Январь 16, 2010, 21:07 »

пробовал и <QMessageBox> не рабило, пробовал поставить QMessageBox::information(this,(QString)"Результат", (QString)"g");, тож самое выдаёт (ставил, потому что советовали).

Библиотеку создаю в qt creator'е -> Создать библиотеку С++ -> Shared...

Вооот, заработало.... (месачбоксы убрал), привызове функции из левого скрипта. вот так:
(не ругайтесь, просто этот скрипт портативен, потому его юзаю)

retvar := DllCall("reslib64.dll\_ZN8Reslib6410resagerlibEi", Int, 4)

Выдало нормально, правда имя функции в коде другое (как задать своё?) вот код:

Код:
#include "reslib64.h"

  Reslib64::Reslib64(int asd, int qwe)
{
    ;
}

int Reslib64::resagerlib(int ivar)
{
     return 10;
}

В коде "resagerlib" а в DLL "_ZN8Reslib6410resagerlibEi" Грустный
« Последнее редактирование: Январь 16, 2010, 21:32 от Resager » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Январь 16, 2010, 22:48 »

не понял вопроса... как поменять имя ф-ии в длл? насколько я знаю, никак - есть определенный формат именования символов
Записан
Dendy
Гость
« Ответ #3 : Январь 16, 2010, 23:20 »

Какую имено вы себе ставите задачу? Вынести в DLL функционал для работы с XML для своих программ или создать DLL, которой можно будет пользоваться в произвольных программах? Если первое - читайте про Qt Plugin System.
Записан
Resager
Гость
« Ответ #4 : Январь 17, 2010, 12:50 »

Для своих нужд, в своих программах хочю использовать.
Второе. как я понимаю более широкое значение имеет и более сложную постановку? В идеале конечно было бы неплохо чтобы все проги могли использовать.

Но первым делам: да, хочю вынести функционал для работы с хмл и использовать в своих прогах.

На счёт имени функции: я бы хотел вызывать вызывать функции с таким же именем, как и у меня в коде.... ну например в "opengl32.dll" функция "glBegin" а не как у меня, в коде resagerlib, а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"
Записан
Dendy
Гость
« Ответ #5 : Январь 17, 2010, 13:29 »

Использовать Qt Plugin. И да: http://www.rusedu.info/Article1031.html
Записан
crossly
Гость
« Ответ #6 : Январь 17, 2010, 14:49 »

Код:
а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"
а зачем??... я немного в недоумении... а что стандартный способ использования .h и .lib не подходит??
Записан
SASA
Гость
« Ответ #7 : Январь 18, 2010, 11:25 »

Код:
а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"
а зачем??... я немного в недоумении... а что стандартный способ использования .h и .lib не подходит??
+1
Записан
Resager
Гость
« Ответ #8 : Январь 18, 2010, 16:27 »

Библиотека будет использоваться другими программами, на другом языке.
Записан
SASA
Гость
« Ответ #9 : Январь 18, 2010, 18:38 »

Читаем http://www.prog.org.ru/topic_8259_0.html, пробуем, задаём вопросы.
Записан
crossly
Гость
« Ответ #10 : Январь 18, 2010, 19:56 »

Библиотека будет использоваться другими программами, на другом языке.


тогда не понятно зачем Qt .... ведь твоя длл потянет за собой Qt-шные.... мот лучше сразу на целевом....
Записан
Dendy
Гость
« Ответ #11 : Январь 18, 2010, 20:35 »

тогда не понятно зачем Qt

Мне, например, очень даже понятно. Здравая идея. Автору я бы порекомендовал интерфейсы строить на C, используя собственные хендлы для обращения к данным. К примеру как обращаются к текстурам в OpenGL.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.128 секунд. Запросов: 23.