an meinem Projekt habe ich eine Klasse welche ich per __declspec(dllexport) exportiere, damit ich diese außerhalb der Bibliothek verwenden kann.
In dieser Klasse habe ich folgende Methode deklariert:
Code: Alles auswählen
virtual RenderWindowPtr CreateRenderWindow(const String name,
const WindowProperties* properties = NULL,
const void* reserved = NULL,
const void* hwnd = NULL) const;
Code: Alles auswählen
RenderWindowPtr APOApplication::CreateRenderWindow(const String name,
const WindowProperties* properties,
const void* reserved,
const void* hwnd) const
{
APO_GUARD_FAST(_T("APOApplication::CreateRenderWindow"));
if (m_activeRenderEnv.get() == NULL)
APO_EXCEPT(ExceptionType::IllegalState, _T("Graphics system has not been initialized"), _T("APOApplication::CreateRenderWindow"));
return m_activeRenderEnv->CreateRenderWindow(name, properties, reserved, hwnd);
}
Code: Alles auswählen
typedef boost::shared_ptr<IRenderWindow> RenderWindowPtr;
Gedanken um Aufrufe wie AddRef und Release machen muss.
Die Bibliothek kompiliert auch ohne Fehlermeldung und weitere Beanstandungen. In einem kleinen Testprojekt habe ich jetzt die Methode folendermaßen
versucht aufzurufen:
Code: Alles auswählen
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
APOApplicationPtr app = APOApplication::CreateApplication();
{
if (!app->IsRenderTypeAvailable(RenderType::Direct3D10))
{
MessageBox(NULL, _T("No DirectX 10 available!"), _T("- APO -"), MB_OK);
return 0;
}
app->InitGraphics(RenderType::Direct3D10);
RenderWindowPtr window = app->CreateRenderWindow(_T("Test"));
window->Create();
app->Start();
}
return 0;
}
das es wohl mit dem String-Parameter zusammenhängt, da es problemlos klappt wenn ich den Parameter entferne??
Die Definition des String-Objektes ist abhängig davon, ob das Projekt unter Verwendung des Unicode oder Multibyte Zeichensatzes
kompiliert wird. Dies steht natürlich in einer Header-Datei:
Code: Alles auswählen
//- Char and String
typedef std::string StdString;
typedef std::wstring StdWideString;
#if APO_UNICODE > 0
typedef StdWideString String;
typedef wchar_t Char;
#else
typedef StdString String;
typedef char Char;
#endif
bzw. was ich falsch mache???