BMax dll - > C++

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Trust

Betreff: BMax dll - > C++

BeitragDo, März 07, 2019 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Gemeinde,

es würde mich interessieren ob es irgendwie möglich ist, eine mit BMax erzeugte dll in C++ zu verwenden? Hab keine Ahnung, da ja die includes und .lib zu der dll fehlen um sie in Visual Studio einzubinden.
Die Idee wäre gewesen, in BMax ne kleine 2D lib zusammen zu basteln und diese dann in C++ zu verwenden.
Oder gibt es vlt. die Max2D Engine als dll oder Framework für C++?
Im Grunde geht es mir darum, dass ich für ein Projekt die rudimentäre Engine gerne in BMax programmieren möchte um den ganzen Lowlevel stuff weg zu haben den man zb. in SDL hat. In C++ möchte ich dann nur noch die "richtige" Gamelogic programmieren.
Komplett alles in BMax zu machen ist mir dann doch zu viel BMax, da zum ersten es keine gescheite IDE gibt und zum zweiten man sich in BMax einen Wolf tippt mMn. (2x Function + end um eine Funktion zu definieren, oder in einer Klasse für jeden Member Field davor schreiben etc.) dazu fehlen mir einige Features wie Templates, Overloading etc..


Liebe Grüße
Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Farbfinsternis

BeitragFr, März 08, 2019 8:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Beispiel von stackoverflow.com :
Zitat:

#include <windows.h>
#include <iostream>

/* Define a function pointer for our imported
* function.
* This reads as "introduce the new type f_funci as the type:
* pointer to a function returning an int and
* taking no arguments.
*
* Make sure to use matching calling convention (__cdecl, __stdcall, ...)
* with the exported function. __stdcall is the convention used by the WinAPI
*/
typedef int (__stdcall *f_funci)();

int main()
{
HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\Documents and Settings\\User\\Desktop\\test.dll");

if (!hGetProcIDDLL) {
std::cout << "could not load the dynamic library" << std::endl;
return EXIT_FAILURE;
}

// resolve function address here
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
if (!funci) {
std::cout << "could not locate the function" << std::endl;
return EXIT_FAILURE;
}

std::cout << "funci() returned " << funci() << std::endl;

return EXIT_SUCCESS;
}
Farbfinsternis.tv

Trust

BeitragFr, März 08, 2019 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Farbfinsternis,

das Problem sind dann die dependencies der mit BMax erzeugten dll. Wenn ich zb. Grafikbefehle oder sonst irgendwelche Module nutze in den BMax Funktionen. Diese werden dann fehlen wenn ich die dll in C++ nutze.
Daher die Frage wie man das realisieren könnte? Hat das schon mal jemand gemacht?

LG Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Thunder

BeitragSo, März 10, 2019 2:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Es könnte möglich sein, aber du musst möglicherweise die Runtime auch in dein Programm linken und das willst du vielleicht nicht. Das beinhaltet den GC und ein paar üble Hacks, die man noch finden kann...
Ich würde als erstes versuchen, direkt die .a files in den Modul-Ordnern in das C++ Projekt zu linken. Weiß halt nicht, ob der Microsoft Linker die versteht, also du müsstest möglicherweise mit MinGW arbeiten. Du müsstest dann immer schauen, wenn Symbole fehlen, dass du die weiteren .a files auch in dein C++ Projekt linkst.

Vielleicht ist es sogar besser, wenn du deine Game Logic in C++ schreibst und dann trotzdem mit BlitzMax kompilierst und das C++ nur hineinlinkst? Weil du kannst von C++ aus die BlitzMax-Funktionen aufrufen. Da reicht dann sozusagen:

BlitzMax: [AUSKLAPPEN]
Import brl.glmax2d
Import "game.cpp"

Extern "C"
Function game()
EndExtern

game


Weitere Möglichkeit: Kennst du SFML? Die lib ist mit dem Komfort von BlitzMax fast vergleichbar.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Trust

BeitragSo, März 10, 2019 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Vielleicht ist es sogar besser, wenn du deine Game Logic in C++ schreibst und dann trotzdem mit BlitzMax kompilierst und das C++ nur hineinlinkst? Weil du kannst von C++ aus die BlitzMax-Funktionen aufrufen. Da reicht dann sozusagen:


Hey, das ist mal eine gute Idee, so kann man es natürlich auch machen. Super, danke!

Lg Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group