[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Spam, Jack  
Функции в длл.
AmadeyДата: Среда, 22 Апреля 2009, 20:36 | Сообщение # 1
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
С длл никогда не работал, тут вот встала такая проблема.
Вот к примеру хочу записать класс в длл, как функцию.

class MyClass
{
public:
....
protected:
....
void Create
{
....
....
тут всякий код
}
};

Теперь, как мне запихнуть это в длл?

Пробовал так:
#define DllExport __declspec( dllexport )

class DllExport C {
int i;
virtual int MyCreate( void ) { return new Create*; }
};

Пишет что не может преобразовать тип Create* в int.

Если писать return 1 то все ок, НО ! Не компилируется в dll, а только в lib и exp, тобишь статическую библиотеку.

 
AmadeyДата: Среда, 22 Апреля 2009, 23:10 | Сообщение # 2
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
Quote

Дык это ошибка кода а не экспотрта.

Ну дак понятно, что я не могу возвратить класс в функцию, тип класса не соответсвует типе функции. другой вопрос как это сделать...

 
AmadeyДата: Четверг, 23 Апреля 2009, 00:47 | Сообщение # 3
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
Quote
Врешь. Пример - огр.

А в огре как ?

P.S. Стоп! фтопку классы! Забудем пока о них.
Тут мне вспомнился один враппер, по-моему flow3d. Это враппер огра. Так вот... я вот из длл не работал, но мне интересно, как завернуть туже функцию огра к примеру такую

Entity *ent = mSceneMgr->createEntity("какоенто имя", "какоента меш");

mSceneMgr->getRootSceneNode()->attachObject(ent)

1) Как записать в длл первую функцию. Она же два параметра должна возвращать, а длл вроде бы не больше одного можно. Я пока еще не пробовал, но прокатит ли в качестве указания параметров указатели (ооп)?
т.е. вместо
Entity *ent = mSceneMgr->createEntity("какоенто имя", "какоента меш");
написать

Entity handle = mSceneMgr->createEntity(param2_name,param3_path);

handle,param2_name, param3_path

Ну вот что бы более наглядней что бы все поняли мой бред:

Function Entity_Load (handle, name,path)
Entity *ent = mSceneMgr->createEntity(name, path);
mSceneMgr->getRootSceneNode()->attachObject(ent)
End Function

И самое главное, будет ли она работать?

 
AmadeyДата: Четверг, 23 Апреля 2009, 01:02 | Сообщение # 4
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
Вот решил привести все это на конкретном примере
Вот код на огре. Создание обычного скайплэйна и загрузки меша (в конце):
Code

#include "ExampleApplication.h"

class SkyPlaneApplication : public ExampleApplication
{
//public:
    // SkyPlaneApplication() {}

  //int i;
     // Just override the mandatory create scene method
   
     createScene(void)
     {
         // Set ambient light
        mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));

         // Define the required skyplane
         Plane plane;
         // 5000 world units from the camera
         plane.d = 5000;
         // Above the camera, facing down
         plane.normal = -Vector3::UNIT_Y;
         // Create the plane 10000 units wide, tile the texture 3 times
    
   // параметры - (показать\скрыть, id, путь к материалу, Width, Scaletexture)
       mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane",1000,9);
    
         // Create a light
         Light* l = mSceneMgr->createLight("MainLight");
         // Accept default settings: point light, white diffuse, just set position
         // NB I could attach the light to a SceneNode if I wanted it to move automatically with
         //  other objects, but I don't
         l->setPosition(20,80,50);

         // Also add a nice dragon in
   
         Entity *ent = mSceneMgr->createEntity("dragon", "dragon.mesh");
         mSceneMgr->getRootSceneNode()->attachObject(ent);
    
   

     }
   

};

Все дело в том что код пишется внутри класса, а мне нужно запихнуть в длл именно функции создания неба, загрузки меша и т.д. Как это осуществить? Помогите пожалуйста.

 
  • Страница 1 из 1
  • 1
Поиск: