Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Martiro от Август 22, 2014, 13:05



Название: Адрес функции в динамической библиотеки
Отправлено: Martiro от Август 22, 2014, 13:05
Всех приветствую! Вопрос такой.
Создал проект динамической библиотеки, код ниже. А вот чтобы вызвать функцию из неё прходится вызывать "кривоватый" адрес функции.
Как грамотно решить эту проблемку?

Файл проекта:
Код:
QT -= gui

TARGET = GetShoreLines

TEMPLATE = lib

OBJECTS_DIR = obj
DEFINES += GETSHORELINES_LIBRARY
SOURCES += getshorelines.cpp
HEADERS += getshorelines.h

getshorelines.h:
Код:
#ifndef GETSHORELINES_H
#define GETSHORELINES_H
#include <QString>
#include <QObject>
#include <Qt>
#include <QtDebug>

void ExecLibrary(QString* sFile, int &iNpts, ShorelinePoint* &pPts);

#endif // GETSHORELINES_H

getshorelines.cpp:
Код:
#include "getshorelines.h"

void ExecLibrary(QString* sFile, int &iNpts, ShorelinePoint* &pPts)
{
    ...
}

Вызывать приходится функцию _Z11ExecLibraryP7QStringRiRP14ShorelinePoint, так:
Код:
...
Fct myFunction = (Fct)(myLib.resolve("_Z11ExecLibraryP7QStringRiRP14ShorelinePoint"));
...
А хотелось бы просто ExecLibrary. ::)


Название: Re: Адрес функции в динамической библиотеки
Отправлено: VPS от Август 22, 2014, 13:36
Попробуйте дописать extern "C" перед объявлением метода в заголовочном файле библиотеки.


Название: Re: Адрес функции в динамической библиотеки
Отправлено: Fregloin от Август 24, 2014, 09:07
библиотека создается в Qt? Если да, то должен создаться макрос YOURLIB_SHAREDEXPORT, который позсдавляете в сигнатуры функций, тогда компилятор сделает все как надо. И вообще читайте документацию по Qt, там все написано как юзать свои/чужие либы.