Пятница, 22 Ноября 2024, 02:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Вопрос про dll
MaxaonДата: Понедельник, 10 Сентября 2012, 12:59 | Сообщение # 1
участник
Сейчас нет на сайте
Я пробую написать набор функций для импортирования в game maker.
Функции писал ради эксперемента.
Но тут возникли 2 проблемы:
1.я недостаточно знаю с++(пока что)
2.следствие из первого
Пользуюсь комписятором Dev C++. При создании проекта dll он создает два файла:
А.cpp и A.h.
В первом написан такой код(писал не я, а сам заварганился):

Честно говоря плохо понимаю в чем здесь суть, но код прочитать могу biggrin
Для чистоты выложу еще файл h:

Вообщем 1.вопрос заключается в том куда вставить свою функцию biggrin
Про конструкторы и деструкторы я еще не проходил поэтому не представляю как с ними работать
Но сам я пробывал заварганить функцию в конце файла cpp
в h конечно же я не стал пихать
2.В справке написан пример на дельфи
Там написано так:

Меня интересует строчка cdecl. Вроде там упоминается что надо исп. либо cdecl либо stdcall.
Но что это такое я не понимаю. Пробывал так сделать, но выдает ошибку.
Решил сделать так, пример:

Это я в сети нашел: _cdecl и _stdcall
но опять же что это?


Сообщение отредактировал Maxaon - Понедельник, 10 Сентября 2012, 13:11
НохчиДата: Понедельник, 10 Сентября 2012, 13:11 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (Maxaon)
но опять же что это?

Это конвенции вызова, можешь википедию почитать.
Что касается самой dll, экспортировать в твоем случае надо С-функции(а не С++ и тем более не классы). К примеру вот так:
lib.h
Code

#ifndef MYDLLH
#define MYDLLH

extern "C" _declspec(dllexport) double SUM(double a,double b);

#endif

lib.c
Code

#include "lib.h"

extern "C" _declspec(dllexport) double SUM(double a,double b)
{
        return a+b;
}


ADD
ГМ требует соблюдения __cdecl конвенции, в VC++ по-моему она стоит по-умолчанию, но на всякий случай лучше писать double __cdecl SUM


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Понедельник, 10 Сентября 2012, 13:33
MaxaonДата: Понедельник, 10 Сентября 2012, 13:33 | Сообщение # 3
участник
Сейчас нет на сайте
Сейчас попробывал код lib.h и lib.c
Ошибку выдает:
1 ... myproj\A.c In file included from lib.c
4 ... myproj\lib.h expected constructor, destructor, or type conversion before '(' token
4 ... myproj\lib.h expected `,' or `;' before '(' token
3 ... myproj\lib.c expected constructor, destructor, or type conversion before '(' token
...myproj\lib.c expected `,' or `;' before '(' token
...myproj\Makefile.win [Build Error] [lib.o] Error 1
НохчиДата: Понедельник, 10 Сентября 2012, 13:39 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Проект криво собран. Что за А.с у тебя там? Убери лишний код и лишние файлы.

Многие вопросы по Windows отпадут, если посмотреть тут
MaxaonДата: Понедельник, 10 Сентября 2012, 13:48 | Сообщение # 5
участник
Сейчас нет на сайте
Нохчи,
Quote
Что за А.с у тебя там?

ой да я все в одном проекте делаю убирать все лишнее лень
сейчас создал новый
Но все-таки опять ошибка:
1 C:\Program Files\Dev C++\Dev-Cpp\myproj\lib.c In file included from lib.c
4 C:\Program Files\Dev C++\Dev-Cpp\myproj\lib.h syntax error before string constant
C:\Program Files\Dev C++\Dev-Cpp\myproj\Makefile.win [Build Error] [lib.o] Error 1

Добавлено (10.09.2012, 13:48)
---------------------------------------------
Еще почему то после сборки при запуске gm какой то файл dat требует
посмотрел другие библиотеки к gm, там везде dat
может это dev c++ не дает?


Сообщение отредактировал Maxaon - Понедельник, 10 Сентября 2012, 13:49
НохчиДата: Понедельник, 10 Сентября 2012, 13:51 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Скопипастил код из #2 в VC++, DLL собирается без проблем. Попробуй _declspec поменять на __declspec(с двумя подчеркиваниями). Если не поможет, присылй проект.

Многие вопросы по Windows отпадут, если посмотреть тут
MaxaonДата: Понедельник, 10 Сентября 2012, 13:59 | Сообщение # 7
участник
Сейчас нет на сайте
Нохчи, Все гуд biggrin
Работает с двумя __ )
Спсибо)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг