wie w?rde der code in C++ aussehen?

Previous topic - Next topic

Heiko

Code (glbasic) Select
#define LIB_NAME "Xors3D.dll"
DECLARE_ALIAS(wrap_xAddMesh, LIB_NAME, "_xAddMesh@8", (int,int), void);


Code (glbasic) Select
FUNCTION xAddMesh: dest,src
INLINE
PROC_ADDR(wrap_xAddMesh);
wrap_xAddMesh((int)dest,(int)src);
ENDINLINE
ENDFUNCTION


wobei die funktion unten wohl in c++ nicht notwendig sein wird.
vielleicht sollte ich erw?hnen, da? ich nen header f?r etliche funktionen so schreiben will.
ich frage hier auch nur, weil ich die einfachste unkomplizierteste l?sung suche, es gibt ja wohl verschiedene arten das zu l?sen.

auch alle importierten funktionen in eine klasse zu packen hab ich schon gesehen....
ich m?chts aber ganz simpel...

Schranz0r

#1
als erstes musst du die lib linken (Die wird beim erstellen der DLL erstellt)

Dann:
Code (glbasic) Select

#define IMPORT extern "C" __declspec(dllimport) // wenn du die DLL mit extern "C" exportiert hast!
...
IMPORT BlaBlub(int a, int b);



Jetzt kannst du BlaBlub im Code verwenden...
wirst aber ein wenig experimentieren d?rfen :D

EDIT:

Schau dir mal das an, ist mir grad so in die H?nde gefl?gen :D

Code (glbasic) Select
/* Programm Beispiel test.c */
#include <windows.h>

#define THE_DLL "Beispiel.DLL"

HINSTANCE hDLL;

typedef unsigned __int16 word;

/* Hier wir eine dll Funktion bekannt gemacht */
portinit(void)
{
typedef UINT (CALLBACK* LPINT)();
LPINT p;
p = (LPINT)GetProcAddress(hDLL,"PORTINIT");
return p();
}
/* Ebenso*/
inport(word Addr)
{
typedef UINT (CALLBACK* LPINT)(word);
LPINT p;
p = (LPINT)GetProcAddress(hDLL,"INPORT");
return p(Addr);
}

void main(void)
{
int in;
int addr = 0x3f8;

hDLL = LoadLibrary(THE_DLL);
if (hDLL == NULL)
{
/*Fehler beim oeffnen von*/
}

portinit();
in = input(addr);

/* fertig? dann schliessen */
FreeLibrary(hDLL);
}
/* Ende von test.c */


edit2:

http://www.functionx.com/visualc/libraries/staticdll.htm
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

mir gings um eine pure dll, ohne lib.
und eben die einfachste codesparendste art und weise.
dein zweites beispiel ist da schon nen guter ansatz.

Code (glbasic) Select
#define THE_DLL "Beispiel.DLL"

HINSTANCE hDLL;
hDLL = LoadLibrary(THE_DLL);

p = (LPINT)GetProcAddress(hDLL,"PORTINIT");
return p();


wollte tats?chlich sozusagen nur wie in dem code die dll bekanntmachen, und unten sozusagen in einer zeile die funktionen jeweils importen, gleich mit etwaigen parametern etc.
der k?rzeste code sozusagen...


mmm und kein declspec in sicht!

Schranz0r

kenns eigentlich nur mit Lib... ohne echt keinen plan ..
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

och dat probier und studier ich bis es geht.