Я получил несколько .dll файлов с простым фреймворком. И в проекте у меня всего два файла.
1) Хедер, где содержаться все объявления функций из dll. 2) Файл, где я хочу вызвать какие-то из этих функций.
1)
#pragma once
#if defined(FRAMEWORK_PROJECT)
#define FRAMEWORK_API __declspec(dllexport)
#else
#define FRAMEWORK_API __declspec(dllimport)
#endif
Class Sprite;
FRAMEWORK_API Sprite* createSprite(const char* path);
FRAMEWORK_API void drawSprite(Sprite*, int x, int y);
FRAMEWORK_API void getSpriteSize(Sprite* s, int& w, int &h);
FRAMEWORK_API void destroySprite(Sprite* s);
FRAMEWORK_API void drawTestBackground();
FRAMEWORK_API void getScreenSize(int& w, int &h);
FRAMEWORK_API unsigned int getTickCount();
FRAMEWORK_API void showCursor(bool bShow);
enum class FRKey
{
RIGHT,
LEFT,
DOWN,
UP,
COUNT
};
enum class FRMouseButton
{
LEFT,
MIDDLE,
RIGHT,
COUNT
};
class FRAMEWORK_API Framework
{
public:
virtual void PreInit(int& width, int& height, bool& fullscreen) = 0;
virtual bool Init() = 0;
virtual void Close() = 0;
virtual bool Tick() = 0;
// param: xrel, yrel: The relative motion in the X/Y direction
// param: x, y : coordinate, relative to window
virtual void onMouseMove(int x, int y, int xrelative, int yrelative) = 0;
virtual void onMouseButtonClick(FRMouseButton button, bool isReleased) = 0;
virtual void onKeyPressed(FRKey k) = 0;
virtual void onKeyReleased(FRKey k) = 0;
virtual ~Framework() {};
};
FRAMEWORK_API int run(Framework*);
2)
#include "Framework.h"
class MyFramework : public Framework {
public:
virtual bool Tick()
{
drawTestBackground();
return (false);
}
};
int main(int argc, char *argv[])
{
return run(new MyFramework);
}
Но при любом вызове я получаю ошибку undfined reference. Исходников dll у меня нет. Подскажите что не так: ошибка моя, или, возможно, в самых dll?
Я только начал работать на ОС Windows и впервые столкнулся с DLL, поэтому буду благодарен за любые указания на ошибки.
Компилирую так: g++ frame.lib game.cpp
Итак, что нужно делать в таких кейсах:
правильно линковать файлы через флаги -l -L.
проверить или файл не был создан через Visual Stduio. Если да, то файл нужно добавить к проекту в Visual Stduio. Просто через командную строку компилиться не будет.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Насколько я знаю, если вызвать int array[500] например в std::cout << array;, то я получу адрес первого элемента массиваСоотвественно std::cout << *array; выведет...
решил написать свойobj парсер, и столкнулся с небольшой проблемой