[C++] Functie exporteren uit DLL

Status
Niet open voor verdere reacties.

burner202

Gebruiker
Lid geworden
28 sep 2007
Berichten
70
Hallo iedereen,
Ik probeer een .dll voor Messenger Plus te maken, maar om functies bruikbaar te maken hiervoor moet je je functies blijkbaar exporteren. Nu heb ik de volgende (test) code:
Code:
extern "C" __declspec(dllexport) int __stdcall msgBox()
{
	return 1;
}
Maar dit heeft net niet het gewensde effect, omdat er nu niet msgBox wordt geexporteerd, maar _msgBox@0 (dus onbruikbaar voor MSG+ :()


Nu denk ik dat ik een .def bestand moet gebruiken, zoals in een voorbeeld dat ik hier heb gevonden, in dit voorbeeld werkt het wel en worden de functies geexporteerd als de gewone namen.

Nu is het probleem alleen dat als ik een .def bestand in mijn project toevoeg, hij het niet lijkt mee te nemen als ik hem compileer (Een verandering in het .def bestand zorgt er niet voor dat het project out of date is), weet iemand hoe ik dit moet doen en/of ik een fout maak in mijn code? Want het begint me redelijk te frustreren nu ik er 3 dagen mee bezig ben.. :P

PS: ik gebruik vs2010
 
Als je een programma schrijft waarbij je gebruik wilt maken van een geëxporteerde functie uit een load-time dynamic link library moet je linken naar de desbetreffende static library.

Bij het gebruik maken van een geëxporteerde functie uit een run-time dynamic link library moet je na het laden van de dynamic link library gebruik maken van de GetProcAddress functie.

'Name mangling' is afhankelijk van de compiler die je gebruikt. Sommige C++ compilers hebben het 'export' keyword geïmplementeerd voor het gebruik van 'unmangled names'. Declareer de geëxporteerde functie met het keyword 'extern "C"' en zonder de __stdcall calling convention voor 'unmangled names'. Je kunt de functie namen ook in het bijbehorende .def bestand bewerken. Voor meer informatie zie Wikipedia/Name mangling.
 
Bedankt voor je uitleg, het is me ondertussen gelukt om mijn functies te exporteren met een .def bestand. Ik weet niet welk effect __stdcall op de name mangling heeft, maar met een .def bestand kan je ook met __stdcall de mangling volledig uitschakelen. (en messenger plus vereist ook dat je __stdcall gebruikt).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan