Forum: PC-Programmierung Problem mit einer dll bei Visuall C++


von Marcel (Gast)


Lesenswert?

Hi,

ich habe vor einen Plugin für einen Patches eines Programmes zu 
schreiben.

Der Patch unterstützt Plugins, indem ich mir eine *.dll schreibe. Diese 
*.dll besitzt nach außen eine Schnittstelle in Form einer Funktion, die 
die anderen, selbst definierten Funktionen dem Patch vorstellt.

Als Beispiel lag ein FreeBasic-Programm bei. Da ich nun nur C/C++ kann, 
bin ich also hingegangen und habe das ganze zunächst versucht zu 
adaptieren.
Klappte auch soweit, jedoch versaut mir der Compiler die Sache.

Die berüchtigte Funktion besitzt den Namen RegisterFunctions und soll 
auch so exportiert werden. Der Compiler geht aber hin und exportiert das 
ganze als "?RegisterFunctions@@YA_NHPAULuaDec@@@Z", was übersetzt wohl 
soviel heißen soll wie "bool __cdecl RegisterFunctions(int,struct LuaDec 
*)"

Wie kann ich dem Compiler beibringen, das er das ganze nicht kodiert? In 
FreeBasic geht das ganze scheinbar über das Schlüsselwort "Alias", 
irgendwas äquivalentes kenne ich jedoch nicht und will sich von mir auch 
nicht in Google finden lassen.

Weiß das wer weiter?

von Peter (Gast)


Lesenswert?

du hast eine C++ schnittstelle geschaffen, was du brauchst ist C

versucht es mal mit

_extern_c
(so in der Art, google ist dein freund)

von Klaus W. (mfgkw)


Lesenswert?

oder in der Art
1
extern "C" .......

von staman (Gast)


Lesenswert?

Versuch mal, die Funktion die du exportieren willst mit __stdcall zu 
deklarieren, also z.B.

int __stdcall Deine_Funktion( int arg1, int arg2 )
{
  ....
}

von Peter (Gast)


Lesenswert?

> Versuch mal, die Funktion die du exportieren willst mit __stdcall zu
> deklarieren, also z.B.
nein das hilft nichts, __stdcall gibt nur an in welcher Reihenfolge die 
Parameter auf den Stack gelegt werden und wer für den wegräumen 
zuständig ist. (ist bei Delphi anders)

von Marcel (Gast)


Lesenswert?

Yeah, sehr cool. Nachdem ich ein extern "C" eingebaut habe und meine 
Stringfunktionen angepasst habe, klappt das ganze. Besten Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.