| Создание DLL на С++ |
|
Ang3L
| Дата: Вторник, 10.03.2009, 20:13 | Сообщение # 1 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Благодаря Великому и Неподражаемому, Danox'у, мы нашли в чём проблема. Проблема заключалось в том что код надо компилить, в принудительном порядке, как С код. Параметр /ТС. Microsoft Visual Studio 2008 > Project > [project_name] Properties (Alt + F7) > Configuration Properties > C\C++ > Advanced > Compile As > Compile As C Code (/TC) Что же нужно чтобы сделать ДЛЛ на С++ для ГМ? 1) Создать пустой проект. 2) В Configuration Properties > General > Configuration Type поставить Dynamic Library (*.dll) 3) Создать файл исходников. Какое расширение выбрать? В случае, если хотите следовать пункту 4.1), то без разницы, а так только *.с . Но лучше, в любом случае, *.с . Так будет понятнее. А здесь выбираем: либо способ 4.1, либо способ 4.2 В этом файле написать строку: 4.1) Или такую: Quote #define export __declspec (dllexport) Следовать совету, тот что в самом вверху. Переключить на принудительную компиляцию как С код. Здесь мы определяем, что слово "export" будет означать "__declspec (dllexport)" 4.2) Или такую: #define export extern "C" __declspec (dllexport) 5) Компилим наш исходник. Всё! Вот пример, простой функций сложения: Quote export double add(double a, double b) { return (a + b); } Сначала пишем волшебное слово " export", потом что возращает функция ( double), потом название функций (add) и её параметры. Слово " export" пишем перед каждой функцие что мы хотим использовать непосредственно в ГМ. И последнее, что надо знать: В ГМ 2 типа переменных: ty_real и ty_string. Соответсвенно, в С++: double и char*. ty_real = double ty_string = char* Пример с возращаемой строкой: Quote export char* number() { return "Number"; } Специфику С++ оставляю на ваши плечи. P.S.: Хочу добавить, если не догадаетесь. Хотя в сам ГМ нельзя вернуть класс, указатель и т.д. Можно оперировать с ним в "воздухе". Так сказать, ход конём. Функций без слова export будут использоваться только внутри dll. Например, с его помощью можно создать объект определённого класса. И управлять им с помощью функций определённым в дллке. Например, вы можете реализовать работу с памятью. Да и другие интересные вещи. А главное, можно существенно повысить скорость! Для этого придётся использовать метод 4.2), а не 4.1) P.P.S.: Работа с другими компиляторами, настройками не гарантируется!
Blogpost
|
| |
| | |
|
Danox
| Дата: Понедельник, 16.03.2009, 00:29 | Сообщение # 2 |
Болтун
Группа: Проверенные
Сообщений: 213
Статус: Offline
|
Но придется писать на C а я хочу на c++ Я тут продвинулся пишем так Code #define export extern "C" __declspec (dllexport) вместо Code #define export __declspec (dllexport) То есть выполняем кусок кода на C остальное на c++ Все работает. Ну и билдим теперь как не c код а c++ код Ang3L я думаю так лучше =)
Сообщение отредактировал Danox - Понедельник, 16.03.2009, 00:46 |
| |
| | |
|
Ang3L
| Дата: Понедельник, 16.03.2009, 12:17 | Сообщение # 3 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Вроде как работает. Так будет правильнее всего. Для ГМ нужен "С", мы его предоставили, а всё остальное будем делать на С++. Всё с ДЛЛ наконец-то разобрались.
Blogpost
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 16.03.2009, 12:32 | Сообщение # 4 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
У меня тот твой проект только С++. Си код там почти не работает (что странно)
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Ang3L
| Дата: Понедельник, 16.03.2009, 17:05 | Сообщение # 5 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (WertyXBOCT) У меня тот твой проект только С++. Си код там почти не работает (что странно) Не понял, расширение у файла reger.c, и компилятор опознаёт его как С код и компилирует соответственно, без надобности настраивать проект. Добавлено (16.03.2009, 17:05) --------------------------------------------- Ща попробовал работу с классами и списками. Всё отлично работает! т.е. код работает как С++.
Blogpost
|
| |
| | |
|
Danox
| Дата: Понедельник, 16.03.2009, 17:19 | Сообщение # 6 |
Болтун
Группа: Проверенные
Сообщений: 213
Статус: Offline
|
Это дебаг версия ддлки? Размер большой для такой дллки у меня определение коорд мышки и возврат цвета 7 кб весит релиз. дебаг в 4 раза больше зачем то не пойму я визуал. И give source =)))
Сообщение отредактировал Danox - Понедельник, 16.03.2009, 17:28 |
| |
| | |
|
Ang3L
| Дата: Понедельник, 16.03.2009, 17:43 | Сообщение # 7 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Я хз почему такой большой. Это релиз версия. Ты уж извини я новичок в этой области. Попробуй сам откомпиль, мож у тя меньше получится.
Blogpost
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 16.03.2009, 21:49 | Сообщение # 8 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
На самом деле ему пофигу какое расширение, в настройках то указано что С++.
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Ang3L
| Дата: Понедельник, 16.03.2009, 22:53 | Сообщение # 9 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (WertyXBOCT) На самом деле ему пофигу какое расширение, в настройках то указано что С++. Да, но возращать то нужно как "С". Поэтому если без "#define export extern "C" __declspec (dllexport)" и с принудиловкой работать не будет. Корочь, какая разница, всё работает отлично.
Blogpost
|
| |
| | |
|
3bl3gamer
| Дата: Воскресенье, 22.03.2009, 16:00 | Сообщение # 10 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
|
хммм... не, я, конечто, в ентом деле почти ничего не понимаю, что я в свою длл вписать не пробовал, гм ничего не понимал: пишет Error defining an external function и всё. более того, ту же ошибку он выдаёт и на test dll, выложенный Ang3L'ом! че-то я конкретно недопонимаю... Добавлено (22.03.2009, 15:58) --------------------------------------------- ха! скачал пример с gmphysics, дак и в нём та же ошибка! и как понимать сие?! Добавлено (22.03.2009, 16:00) --------------------------------------------- а ultimate3D как работал, так и работает!
|
| |
| | |
|
Ang3L
| Дата: Воскресенье, 22.03.2009, 16:05 | Сообщение # 11 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
3bl3gamer, попробуй екзешник запустить. Quote (3bl3gamer) дак и в нём та же ошибка! и как понимать сие?! Мы ещё не доконца поняли, но я думаю проблема в старости ГМ, а не в длл. Он не преспособлен ко всем вариантам дллки
Blogpost
|
| |
| | |
|
3bl3gamer
| Дата: Воскресенье, 22.03.2009, 16:38 | Сообщение # 12 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
|
сори, в гмфизикс ошибок нет, это я ступил. не, ехе то же выдаёт Добавлено (22.03.2009, 16:38) --------------------------------------------- Ang3L, у тебя-то работает?
|
| |
| | |
|
Ang3L
| Дата: Воскресенье, 22.03.2009, 16:59 | Сообщение # 13 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
3bl3gamer, ну ессесно. Я по второму способу делаю. Мне ща влом компилить. Возьми исходник и откомпиль его в 2 вариантах. Потом получившуюся дллку подставь и попробуй.
Blogpost
|
| |
| | |
|
3bl3gamer
| Дата: Воскресенье, 22.03.2009, 17:24 | Сообщение # 14 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
|
не, всё-таки странно, почему один и тот же пример на у тебя работает, а у меня - нет
|
| |
| | |
|
Ang3L
| Дата: Воскресенье, 22.03.2009, 18:10 | Сообщение # 15 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (3bl3gamer) не, всё-таки странно, почему один и тот же пример на у тебя работает, а у меня - нет Я и говорю, что голову долго ломал над этим. На форум ЙоЙо лазил, но ничё не нашёл. У всех всё норм компилилось и работало, а у меня нет. Частично разобрались с вопросом. P.S.: У меня на компе столько всего поставлено...
Blogpost
|
| |
| | |
|
3bl3gamer
| Дата: Воскресенье, 22.03.2009, 18:49 | Сообщение # 16 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
|
Quote (Ang3L) У всех всё норм компилилось и работало, а у меня нет ну щас-то всё работает! а как ты этого добился?
|
| |
| | |
|
Ang3L
| Дата: Воскресенье, 22.03.2009, 19:34 | Сообщение # 17 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
в первом посте расписано.
Blogpost
|
| |
| | |
|
3bl3gamer
| Дата: Воскресенье, 22.03.2009, 20:29 | Сообщение # 18 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
|
да на С я-то переключился, да не работает всё равно... а может лучше длл не на С писать, а на дельфи какой-нть иль ещё на чём?
|
| |
| | |
|
WertyXBOCT
| Дата: Воскресенье, 22.03.2009, 23:22 | Сообщение # 19 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Я не люблю делфи. Но на нем очень просто писать дллки, в хелпе ГМа написан шаблончик. А сам делфи противная штука с ужасным синтаксисом КАК Я НЕНАВИЖУ СЛОВА BEGIN И END!!!
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Ang3L
| Дата: Понедельник, 23.03.2009, 00:14 | Сообщение # 20 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (3bl3gamer) да на С я-то переключился, да не работает всё равно... а может лучше длл не на С писать, а на дельфи какой-нть иль ещё на чём? Ты сделал и один вариант и второй? И не работает?
Blogpost
|
| |
| |
|
|