Russian Qt Forum

Qt => Общие вопросы => Тема начата: Resager от Январь 16, 2010, 21:00



Название: Создание DLL
Отправлено: 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 совсем недавно... и библиотеку первый раз пишу.... как избавиться и как проверить работоспособность вообще?


Название: Re: Создание DLL
Отправлено: Resager от Январь 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" :(


Название: Re: Создание DLL
Отправлено: Авварон от Январь 16, 2010, 22:48
не понял вопроса... как поменять имя ф-ии в длл? насколько я знаю, никак - есть определенный формат именования символов


Название: Re: Создание DLL
Отправлено: Dendy от Январь 16, 2010, 23:20
Какую имено вы себе ставите задачу? Вынести в DLL функционал для работы с XML для своих программ или создать DLL, которой можно будет пользоваться в произвольных программах? Если первое - читайте про Qt Plugin System.


Название: Re: Создание DLL
Отправлено: Resager от Январь 17, 2010, 12:50
Для своих нужд, в своих программах хочю использовать.
Второе. как я понимаю более широкое значение имеет и более сложную постановку? В идеале конечно было бы неплохо чтобы все проги могли использовать.

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

На счёт имени функции: я бы хотел вызывать вызывать функции с таким же именем, как и у меня в коде.... ну например в "opengl32.dll" функция "glBegin" а не как у меня, в коде resagerlib, а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"


Название: Re: Создание DLL
Отправлено: Dendy от Январь 17, 2010, 13:29
Использовать Qt Plugin. И да: http://www.rusedu.info/Article1031.html


Название: Re: Создание DLL
Отправлено: crossly от Январь 17, 2010, 14:49
Код:
а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"
а зачем??... я немного в недоумении... а что стандартный способ использования .h и .lib не подходит??


Название: Re: Создание DLL
Отправлено: SASA от Январь 18, 2010, 11:25
Код:
а в DLL приходится использовать "_ZN8Reslib6410resagerlibEi"
а зачем??... я немного в недоумении... а что стандартный способ использования .h и .lib не подходит??
+1


Название: Re: Создание DLL
Отправлено: Resager от Январь 18, 2010, 16:27
Библиотека будет использоваться другими программами, на другом языке.


Название: Re: Создание DLL
Отправлено: SASA от Январь 18, 2010, 18:38
Читаем http://www.prog.org.ru/topic_8259_0.html (http://www.prog.org.ru/topic_8259_0.html), пробуем, задаём вопросы.


Название: Re: Создание DLL
Отправлено: crossly от Январь 18, 2010, 19:56
Библиотека будет использоваться другими программами, на другом языке.


тогда не понятно зачем Qt .... ведь твоя длл потянет за собой Qt-шные.... мот лучше сразу на целевом....


Название: Re: Создание DLL
Отправлено: Dendy от Январь 18, 2010, 20:35
тогда не понятно зачем Qt

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