www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Quite Samplepool copy/paste use
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
SCRIMERS



Зарегистрирован: 21.03.2008
Сообщения: 270
Откуда: Sevastopol

СообщениеДобавлено: Ср Июн 22, 2011 21:55    Заголовок сообщения: Quite Samplepool copy/paste use Ответить с цитатой

ребята, а можно работающий пример использования (генерация семплов под ХМ) с минифмод (С\С++) семпл-пула увидеть?
Желательно было бы увидеть код до 64К. А то тут взял проект настроенный в Вижуале, а какие библы туда включать, чтобы ехе не ожирел не знаю.

Цитата:
А то уже третий вечер ковыряюсь - никак не получается.
Отковырял. Поправил quick tutorial и получил то что мне необходимо, а именно использование Семпл-пула для генерации семплов ХМ-модуля, используя его в качестве ресурса в интро.
Создал проект на VS, добавил minifmod, qsp-хедеры и в дебаг-режиме всё сделал.
Радостный я попробовал вставить все свои наработки в заранее найденный и подпиленный проект-заготовку для создания маленьких ехе-шников. Но случился опус: в дебаг-режиме всё компилится (правда размер выходного ехе понятное дело огромный), а вот в релиз-режиме падает на следующих еррорах:


Код:
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)"
1>.\bin\64KBase_release.exe : fatal error LNK1120: 4 неразрешенных внешних элементов


Как-то я это уже решал, но не помню как.
Товарищи кодеры помогите. Гугл облазил весь. За 3 дня у меня уже каша в голове.
_________________
на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Ср Июн 22, 2011 23:36    Заголовок сообщения: Ответить с цитатой

Ты что-то прилинковать забыл (скорее всего minifmod.lib) Настройки компиляции и линковки при включеной Релиз-версии смотри. Там для релиз и дебаг версии опции независимые.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SCRIMERS



Зарегистрирован: 21.03.2008
Сообщения: 270
Откуда: Sevastopol

СообщениеДобавлено: Пт Июн 24, 2011 19:57    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
Ты что-то прилинковать забыл (скорее всего minifmod.lib) Настройки компиляции и линковки при включеной Релиз-версии смотри. Там для релиз и дебаг версии опции независимые.

Ну если ошибка линковщика, то итак понятно, что что-то не прикреплено, а вот что - не ясно.
Явное прикрипление minifmod.lib ничего не даёт.
Кто бы знал, какую либу нужно присоединить.

Искал на гугле по этому поводу. Советовали подключить msvcrt.lib - тогда ошибка точки входа выходила, как её обойти я тоже не знаю
Код:
1>msvcrt.lib(crtexew.obj) : error LNK2001: неразрешенный внешний символ "_WinMain@16"

_________________
на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Ized
shader killer


Зарегистрирован: 28.12.2007
Сообщения: 128


СообщениеДобавлено: Вс Июн 26, 2011 15:48    Заголовок сообщения: Ответить с цитатой

Код:

1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)"
1>.\bin\64KBase_release.exe : fatal error LNK1120: 4 неразрешенных внешних элементов


ты в main.cpp используешь rand(), srand(), new, delete, эти функции реализованы в стандартной либе, но так как ты делаешь 64k, ты не должен использовать стдлибу, поэтому реализовывай свои собственные rand(), srand(), а new, delete ты можешь либо свои написать в стиле

Код:

void * __cdecl operator new (unsigned int pSize)
{
    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pSize);
}

void __cdecl operator delete (void * ptr)
{
    HeapFree(GetProcessHeap(), 0, ptr);
}


либо сразу использовать HeapAlloc/HeapFree.
А вообще постарайся обойтись без динамической памяти, используй глобальные переменные, но учти, так как ты линкуешь без стдлибы, то конструкторы объектов вызываться не будут.

И не ставь никогда на студию руссификатор, be cool.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Вс Июн 26, 2011 16:44    Заголовок сообщения: Ответить с цитатой

Ized писал(а):

ты в main.cpp используешь rand(), srand(), new, delete, эти функции реализованы в стандартной либе, но так как ты делаешь 64k, ты не должен использовать стдлибу, поэтому реализовывай свои собственные rand(), srand(), а new, delete ты можешь либо свои написать в стиле


А я юзал всегда rand(), размер ехе-шника не напрягал при этом )

ЗЫ: я 6-ю студию юзал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ized
shader killer


Зарегистрирован: 28.12.2007
Сообщения: 128


СообщениеДобавлено: Вс Июн 26, 2011 20:08    Заголовок сообщения: Ответить с цитатой

Ты скорей всего линковал с динамической библиотекой msvcrt.dll, а если со статической линковать будешь, то размер вырастет. Раньше все это рестриктилось и не было гарантии, что либы нужной версии будут на компо-машине, сейчас я заценил правила Assembly - они там теперь это гарантируют, так что, Скримерс, можешь для своей демки на Эссембли линковать libc динамически - там можно.

Код:

1>msvcrt.lib(crtexew.obj) : error LNK2001: неразрешенный внешний символ "_WinMain@16"


Ты с ней прилинковал, а точка входа у тебя наверняка

Код:

int main()
{

}


Так как ты пишешь не консольное приложение, а ультрахардкорную интру, то пиши
Код:

BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{

}


Скажу лишь, что квайты не юзают стандартных C-либ, мы пользуемся только WinAPI и Direct3D.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Вс Июн 26, 2011 20:49    Заголовок сообщения: Ответить с цитатой

Ized писал(а):
Ты скорей всего линковал с динамической библиотекой msvcrt.dll, а если со статической линковать будешь, то размер вырастет.


dll-ки ваще не юзал никогда, ну кроме bass.dll, а мои проекты и в Линукс (в Wine) запускаются Smile

Под рукой нет к сожалению проектов. Винт надо старый цеплять, а то бы Scrimers'у конечно же выложил для примера.

PS: stdlib не критично раздувает exe-шник, пакуется же всё. Не, ну если пару килобайт будет выпирать, тогда имеет смысл свой rand влепить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SCRIMERS



Зарегистрирован: 21.03.2008
Сообщения: 270
Откуда: Sevastopol

СообщениеДобавлено: Пн Июн 27, 2011 13:48    Заголовок сообщения: Ответить с цитатой

1. Всё что связано с этими ошибками используется в Сэмплпуле квайтсов. У меня ничего такого нет в коде - это я готовлю шаблон для себя, там минимум всего: Сэмплпул+ОГЛ+РасширенияОГЛ.
Код:
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)"

Это было решено через msvcrt.LIB

Далее я пришёл к такой лаже, которую как-то обходил, но сейчас почему-то она появилась, как её решить не знаю.
Вот мои линки
Код:
"kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
и
opengl32.lib glu32.lib glut32.lib msvcrtold.lib lib\minifmod.lib lib\winmm.lib


Кому интересно может глянуть шаблон здесь (VS 2010)
http://upload.net.ua/download.php?file=empty_zip46

Если получится все проблемы решить - будет шаблон для программирования - поделюсь со всеми, кому нужно.
_________________
на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
SCRIMERS



Зарегистрирован: 21.03.2008
Сообщения: 270
Откуда: Sevastopol

СообщениеДобавлено: Вт Июн 28, 2011 12:39    Заголовок сообщения: Ответить с цитатой

Вообщем отказался от libext.h, а всё что в нём было (заголовки и инициализация нужных функций) перенёс в главную функцию.

В голове главного файла
Код:
PFNGLBINDBUFFERARBPROC           glBindBufferARB           = NULL;

и где-то по коду инциализация
Код:
glBindBufferARB           = (PFNGLBINDBUFFERARBPROC)           getProcAddress ( "glBindBufferARB"           );

_________________
на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Ized
shader killer


Зарегистрирован: 28.12.2007
Сообщения: 128


СообщениеДобавлено: Чт Июн 30, 2011 10:24    Заголовок сообщения: Ответить с цитатой

Use Direct3D, be cool.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Чт Июн 30, 2011 10:42    Заголовок сообщения: Ответить с цитатой

Ized писал(а):
Use Direct3D, be cool.


не кул, он не кроссплатформенный ) Мастдай )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ized
shader killer


Зарегистрирован: 28.12.2007
Сообщения: 128


СообщениеДобавлено: Чт Июн 30, 2011 12:31    Заголовок сообщения: Ответить с цитатой

линукс фигня мне не понравилось !!!!!!!!!!! остоётся токо ждать лутшего.Это для меня говно плохо зделана тупо.Немогли зделать всё как в Windovs
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Чт Июн 30, 2011 16:48    Заголовок сообщения: Ответить с цитатой

Ized писал(а):
линукс фигня мне не понравилось !!!!!!!!!!! остоётся токо ждать лутшего.Это для меня говно плохо зделана тупо.Немогли зделать всё как в Windovs


Ага, FreeBSD, MacOS, Android - тоже фигня.

Если сделать всё как в Виндавс - это будет Виндавс Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
unc



Зарегистрирован: 23.09.2007
Сообщения: 150
Откуда: spb

СообщениеДобавлено: Чт Июн 30, 2011 19:21    Заголовок сообщения: Ответить с цитатой

директх 9 пиздатая штука батя тож юзает грит малаца хорошо зделали
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
MAM



Зарегистрирован: 26.09.2007
Сообщения: 36


СообщениеДобавлено: Пн Июл 04, 2011 07:56    Заголовок сообщения: Ответить с цитатой

да!
qsp использует некоторые стандартные функции,
которые сам не описывает.

начало qsp.h:

Код:
//
//// Quite SAMPLEPOOL header
//
// Following functions and constants must be defined:
// sin(), cos(), tan(), abs()
// pow(double, double), pow(double, int)
// log(), exp(), floor()
// srand(), rand(), RAND_MAX, PI
// You can use this code to do it:
//
 #include <math.h>
 #include <stdlib.h>
//
 #ifndef PI
 #define PI            3.14159265358979
 #endif
//
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Программирование Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах