Dll maken

Status
Niet open voor verdere reacties.

timmie201

Gebruiker
Lid geworden
22 mei 2009
Berichten
26
Ik was bezig met een DLL maken alleen het wil niet echt lukken

Code:
// rdll.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"


#include "dll.h"
#include <stdio.h>
#include <urlmon.h>

#pragma comment(lib, "urlmon.lib")

DLLIMPORT void Updater (char locVer[4], char* URL, char* saveTo)
{
    char remVer[4];
    
    printf("Checking for Updates...\n");
    
    URLDownloadToFile(NULL, "http://mijnsite.nl/Updates/Ver.ini", "Ver.ini", 0, 0);
    
    FILE *filePtr;
    filePtr = fopen("Ver.ini", "r");
    
    if(filePtr != NULL)
    {
        fgets(remVer, 4, filePtr);
        fclose(filePtr);
        remove("Ver.ini");
        printf("Latest: %s\n", remVer);
        printf("Current: %s\n\n", locVer);
        
        if(strcmp(locVer, remVer) == 0) /* If versions match */
            printf("No update required!\n");
        else
            if(strcmp(locVer, remVer) < 0) /* If current version lower */
            {
                printf("Old version, now updating!\n");
                URLDownloadToFile(NULL, URL, saveTo, 0, 0);
            }
        else
            if(strcmp(locVer, remVer) > 0) /* If current version higher */
                printf("Custom version detected!\n");
    }
    else
    {
        printf("Ver.ini NOT Detected\n");
    }
}

dll.h
Code:
#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */

DLLIMPORT void Update (char locVer[4], char* URL, char* saveTo);

#endif /* _DLL_H_ */

Ik ontvang de volgende errors:
Error 1 error C2491: 'Updater' : definition of dllimport function not allowed c:\Users\Tim\Documents\rdll\rdll\rdll.cpp 14 rdll
Error 2 error C2664: 'URLDownloadToFileW' : cannot convert parameter 2 from 'const char [45]' to 'LPCWSTR' c:\Users\Tim\Documents\rdll\rdll\rdll.cpp 19 rdll
Error 3 error C2664: 'URLDownloadToFileW' : cannot convert parameter 2 from 'char *' to 'LPCWSTR' c:\Users\Tim\Documents\rdll\rdll\rdll.cpp 38 rdll

Alvast bedankt
 
Waarom gebruik je neit gewoon de standaard .dll code van visutal studio/ defcpp
 
Geen idee eigenlijk, ik ben best nieuw in de cpp wereld en vond dit op internet (klik) Alleen krijg ik het niet gecompiled op een of anderen manier
 
De laatste 2 errors duiden erop dat je IDE is ingesteld om Unicode te gebruiken. Ik heb zelf Visual C++ er niet meer opstaan, maar als je even googlet kun je wel vinden hoe je dat oplost.
 
Dankje de laatste 2 zijn nu verdwenen alleen de eerste blijft nog zitten...
(Voor de mensen die het willen weten dit kan je veranderen in properties van je project je moet hem vanuit unicode naar multi-byte zetten)
 
Voor die 1ste error zal BUILDING_DLL gedefinieerd moeten zijn.

zet helemaal boven aan in rdll.cpp
#define BUILDING_DLL

Of define BUILDING_DLL met m.b.v. de compiler of IDE.
 
Laatst bewerkt:
Ik zal het is proberen

Edit: Nee ik krijg nog steeds error C2491: 'Updater' : definition of dllimport function not allowed iniedergeval bedankt
 
Laatst bewerkt:
Je kan waarschijnlijk gewoon beter de standaard DLL versie gebruiken als je een nieuw oroject aanmaakt
 
Ik zal het is proberen

Edit: Nee ik krijg nog steeds error C2491: 'Updater' : definition of dllimport function not allowed iniedergeval bedankt

Sorry, ik heb niet goed gekeken. #define BUILDING_DLL werkt dus niet.

Zet bovenaan de code:
#define BUILDING_DLL 1
en doe dat in ieder geval voor de regel #include "dll.h";
 
Laatst bewerkt:
Als ik helenmaal bovenaan #define BUILDING_DLL 1 zet krijg ik
fatal error LNK1561: entry point must be defined

en als ik #define BUILDING_DLL er neer zet krijg ik
fatal error C1017: invalid integer constant expression
 
timmie201 zei:
Als ik helemaal bovenaan #define BUILDING_DLL 1 zet krijg ik
fatal error LNK1561: entry point must be defined
Ik weet niet hoe met jouw IDE (ik vermoed VC++ ) een entry point te definieren
Je zou kunnen proberen een DllMain() functie toe te voegen.
Code:
extern "C" BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason,  LPVOID reserved /* Not used. */ )
{
 return TRUE;
}
En voor zover je dat nog niet gedaan hebt, een nieuw DLL project aanmaken met je IDE en daar je code in zetten.
Dan is hopelijk de instelling voor de entry point meteen goed gezet door je IDE.
 
Laatst bewerkt:
Alleen de templete van een DLL zoja, nee vc++ kan je dat ook al aanvinken als je een nieuw project maakt maar toch bedankt.
Ik denk dat ik dit maar op ga geven en dan maar zonder DLL ga werken
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan