Ga naar inhoud

C++ DLL aanmaken voor VB6.0 geeft altijd: No entry point etc


anoniem

Aanbevolen berichten

Ik ben al een week bezig een in C++ geschreven DLL te koppelen aan een VB6.0 applicatie. Dit lukt echter niet. Wanneer eindelijk na veel gepuzzel een dll is gemaakt met 0 errors en 0 warnings, meldt het VB programma steevast dat er geen entrypoint in de dll kan worden gevonden. Alle foutmeldingen komen ook op internet voor, omdat kennelijk meer mensen hier problemen mee hebben. 9 van de 10 oplossingen werken echter (bij mij) niet. Wat ik graag zou willen weten is, hoe schrijf ik een dll met één functie, die vanuit een VB-programma kan worden aangeroepen? Welke projectsettings moet ik gebruiken in Visual Studio 6? Wie zou mij (met een simpel voorbeeld bijv.) kunnen helpen? Alvast bedankt. Ynze.
Link naar reactie
Bedankt nogmaals. Ik heb het geprobeerd, maar het resultaat is 0,0. Het lijkt erop dat met MS Visual Studio C++ geen correcte DLL's gemaakt kunnen worden. De linker genereert een entrypoint naar __DllMainCRTStartup@12, maar dit entrypoint wordt niet geëxporteerd. Mijn functie, die wel geëxporteerd wordt, staat in het rijtje gewone functies, en wordt niet genoemd als entry-point. Het VB-programma kan zowel __DllMainCRTStartup@12 als mijn functie niet vinden als entry-point. Als niemand een werkend voorbeeld heeft van een in C++ geschreven DLL die door een VB-applicatie kan worden aangeroepen, zit er denk ik niets anders op dan het hele programma in C++ te schrijven. Of heeft iemand nog een beter idee? Ynze. De werkelijkheid wordt niet begrensd door wat wij kunnen begrijpen, maar door wat wij kunnen ervaren.
Link naar reactie
Er was juist gekozen voor C++ boven VB om de beperkingen van VB te omzeilen. Ik ben inmiddels bezig het hele programma in C++ te schrijven, zodat er geen DLL meer nodig is. Toch blijf ik het raar vinden dat met alle geboden mogelijkheden in Visual Studio C++ (er zijn zelfs twee wizzards voor het maken van een DLL) het niet mogelijk blijkt een DLL te maken waarbij het entry-point een zelfgemaakte functie is, die vanuit bijvoorbeeld een VB-programma kan worden aangeroepen. Een DLL maken met behulp van VB werkt probleemloos, maar waarom een DLL gemaakt voor slects één toepassing, waar dat ook met een module kan? Ynze.
Link naar reactie
[quote:991d603745="Y.L. Bicknese"]Bedankt nogmaals. Ik heb het geprobeerd, maar het resultaat is 0,0. Het lijkt erop dat met MS Visual Studio C++ geen correcte DLL's gemaakt kunnen worden. De linker genereert een entrypoint naar __DllMainCRTStartup@12, maar dit entrypoint wordt niet geëxporteerd. Mijn functie, die wel geëxporteerd wordt, staat in het rijtje gewone functies, en wordt niet genoemd als entry-point. Het VB-programma kan zowel __DllMainCRTStartup@12 als mijn functie niet vinden als entry-point. Als niemand een werkend voorbeeld heeft van een in C++ geschreven DLL die door een VB-applicatie kan worden aangeroepen, zit er denk ik niets anders op dan het hele programma in C++ te schrijven. Of heeft iemand nog een beter idee? [/quote:991d603745] Je moet expliciet de functieheaders definiëren als geëxporteerd. [b:991d603745]__declspec(dllexport)[/b:991d603745] int __stdcall fnSchaken(void); (zie eerdergenoemde link, ergens onderaan op die pagina staat een link.) __DllMainCRTStartup wordt intern aangeroepen zodra de DLL geladen wordt. Dat is dus eigenlijk je main functie in de source.
Link naar reactie
Als je me nou kunt vertellen wat hier fout aan is......... // Schaken.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" __declspec(dllexport) int __stdcall fnSchaken(void); BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // This is an example of an exported function. __declspec(dllexport) int __stdcall fnSchaken(void) { return 42; } dan zou je mij heel erg blij maken. Ik had verwacht iets van 42 terug te krijgen in mijn VB-programma. Maar ik krijg alleen de mededeling: Can't find entry point fnSchaken in Chess.dll. Ynze.
Link naar reactie
[code:1:7cefe4bc3a] // Schaken.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" __declspec(dllexport) int __stdcall fnSchaken(void); BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // This is an example of an exported function. int __stdcall fnSchaken(void) { return 42; } [/code:1:7cefe4bc3a] Maak een tekstbestand (.def ) aan met de volgende inhoud: [code:1:7cefe4bc3a] LIBRARY MIJNDLLBESTAND DESCRIPTION "DLL Omschrijving." EXPORTS fnSchaken @1 [/code:1:7cefe4bc3a] Voeg nu dit bestand toe aan je project. En compileren...
Link naar reactie
  • 4 weken later...
Ik post niet heel m'n DLL voor het gemak, omdat de functie's qua structuur toch niet verschillen, dit zijn 2 functie's: [code:1:30f5e5af62] Public Function Kwd(Grondgetal As Variant) Kwd = Grondgetal * Grondgetal End Function Public Function Mcht(Grondgetal As Variant, Exponent As Variant) Dim getal As Variant Dim i getal = Grondgetal For i = 2 To Exponent getal = getal * Grondgetal Next i Mcht = getal End Function[/code:1:30f5e5af62] En die compileer ik dan, zet ik in m'n system32 folder. Die voeg ik dan via References toe, maar dan kan ik ze helaas nog niet gebruiken, terwijl dit met andere DLL's blijkbaar wel gaat.
Link naar reactie
[quote:414b4ab426="Rynus Rein"]Ik post niet heel m'n DLL voor het gemak, omdat de functie's qua structuur toch niet verschillen, dit zijn 2 functie's: ... En die compileer ik dan, zet ik in m'n system32 folder. Die voeg ik dan via References toe, maar dan kan ik ze helaas nog niet gebruiken, terwijl dit met andere DLL's blijkbaar wel gaat.[/quote:414b4ab426] Dit is een ander soort DLL, dan van de topic starter. Het maken en gebruiken van een ActiveX DLL heeft meer "voeten in de aarde" dan het maken van een "classic DLL" [url=http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconcreatinganinprocesscomponent.asp]Creating an ActiveX DLL (Visual Basic 6.0 Documentation)[/url]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...