Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2012, 20:28   #1
fees
Новичок
Джуниор
 
Регистрация: 17.10.2012
Сообщений: 1
По умолчанию Класс в динамической библиотеке

Не видит класс в динамической библиотеке.

main.cpp
Код:
#include <QtCore/QTimer>
#include <QtCore/QCoreApplication>
#include <QtCore/QLibrary>
#include <QtCore/QTextStream>
#include <windows.h>
 
 
 typedef void (*func1)();
 typedef void (*func2)(int);
 typedef int (*func3)();
 typedef bool (*func4)();
 typedef void (*func5)();
 typedef void (*func6)();
 
 
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QTextStream qout(stdout);
    QLibrary m("m");
    if(!m.load())
    {
        qout << "Couldn't open the library" << endl;
        return 1;
    }
    func1 _CMyStack = (func1) m.resolve ("CMyStack");
    if(_CMyStack)
    {
        _CMyStack();
    }
    else
    {
        qout << "Couldn't open the function CMyStack" << endl;
    }
 
 
    func2 _Push = (func2) m.resolve ("Push");
    if(_Push)
    {
        _Push(4);
    }
    else
    {
        qout << "Couldn't open the function Push" << endl;
    }
 
    func3 _Pop = (func3) m.resolve ("Pop");
    if(_Pop)
    {
        _Pop();
    }
    else
    {
        qout << "Couldn't open the function Pop" << endl;
    }
 
    func4 _isEmpty = (func4) m.resolve ("isEmpty");
    if(_isEmpty)
    {
        _isEmpty();
    }
    else
    {
        qout << "Couldn't open the function isEmpty" << endl;
    }
 
    func5 _Print = (func5) m.resolve ("Print");
    if(_Print)
    {
        _Print();
    }
    else
    {
        qout << "Couldn't open the function Print" << endl;
    }
 
    func6 _foo = (func6) m.resolve ("foo");
    if(_foo)
    {
        _foo();
    }
    else
    {
        qout << "Couldn't open the function foo" << endl;
    }
 
    QTimer::singleShot(100, &app, SLOT(quit()));
 
    system("pause");
    return app.exec();
}
m.h
Код:
#ifndef M_H
#define M_H
 
#include <iostream>
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef M_API
#   ifdef M_EXPORT
#       define M_API __declspec(dllexport)
#   else
#       define M_API __declspec(dllimport)
#   endif
#endif
 
M_API void foo();
 
class M_API CMyStack
{
public:
   CMyStack();
   void Push(int d);
   int Pop();
   bool isEmpty();
   void Print();
 
private:
    struct Node
    {
        int d;
        Node *p;
    };
 
    Node *top;
};
 
 
#ifdef __cplusplus
 
}
#endif
#endif // M_H
m.cpp
Код:
#include "m.h"
#include <stdio.h>
 
void foo()
{
std::cout << "hi" << std::endl;
}
 
CMyStack::CMyStack()
{
top = NULL;
}
 
void CMyStack::Push(int d)
{
    Node *pv = new Node;
    pv->d = d;
    pv->p = top;
    top = pv;
}
 
int CMyStack::Pop()
{
    if (isEmpty())
    {
        return -1;
    }
    int temp = top->d;
    Node *pv = top;
    top = top->p;
    delete pv;
    return temp;
}
 
 
bool CMyStack::isEmpty()
{
    return top ? false : true;
}
 
void CMyStack::Print()
{
    while (top)
    {
        std::cout << Pop() << ' ';
    }
 
    std::cout << std::endl;
}
Функцию foo видит нормально, но не видит функции в самом классе. В чём проблема?
fees вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Вопрос по библиотеке. C# PROkaZZZniK Помощь студентам 1 10.05.2012 22:26
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
вопрос по библиотеке JIeka Общие вопросы C/C++ 8 26.08.2011 18:19
В библиотеке Mika_32 Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2010 19:00