Avatar billede henrik_dk Nybegynder
29. januar 2007 - 14:24 Der er 8 kommentarer

Knovertering af gammel C kode

Hej,

Jeg har nogle gammel C kode, som jeg vil have konverteret til VS 2003.

Det er vigtigt at funktionerne bibeholder typen "unsigned char*"

--------------------------- Kode start ----------------------
// DLL needed headers
#include <windows.h>

// Headers included by the programmer.
// These headers are function dependent and will vary from time to time.
#include <stdlib.h>  // prototypes for memory allocation functions.

char *buffer = 0;
const int STRMAX = 255;


BOOL WINAPI DllEntryPoint( HINSTANCE hinstDll,
                          DWORD fdwRreason,
                          LPVOID plvReserved)
{
    switch (fdwRreason)
    {
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        return 1;

        case DLL_PROCESS_ATTACH:
            // Put initialization code here (Run the first time DllOpen is called)
            // for each process
            buffer = (char*)malloc(STRMAX*sizeof(char));
            if( NULL == buffer )
                return 0;
            else
                return 1;

        case DLL_PROCESS_DETACH:
          free(buffer);
          return 1 ;
    }

    return 0;
}


// Definition of the Dynamic Link Library exported functions.
// Remember to include your own functions here.!

#ifdef __cplusplus
extern "C" {
// Inserting our function prototypes
unsigned char* FAR PASCAL _export STR2UPPER (long, unsigned char*);
}
#endif



unsigned char* FAR PASCAL _export STR2UPPER(long dummy, unsigned char* argument)
{
    return strcpy( buffer, AnsiUpper(argument));
}

--------------------------- Kode slut ----------------------

Håber at nogen kan hjælpe mig :-)
Avatar billede arne_v Ekspert
29. januar 2007 - 15:37 #1
skal du have compilet det til en Win32 DLL som hidtil ?

eller skal den konverteres til .NET ?

det første bør ikke være så svært - hvilke fejl får du ?

iøvrigt - hvis ikke der er andre funktioner end den STR2UPPER så tror jeg at
du kan skrotte den totalt
Avatar billede henrik_dk Nybegynder
29. januar 2007 - 15:42 #2
Den skal compiles til Win32 DLL som hidtil.

Eksemplet her skal bruges som et lærings eksempel og skabelon.
Avatar billede bertelbrander Praktikant
29. januar 2007 - 20:33 #3
Med et par simple cast's bør det kunne overstætte som det er:
return (unsigned char *)strcpy( buffer, AnsiUpper((char *)argument));

Men det er ikke ret "pæn" kode.
Avatar billede henrik_dk Nybegynder
30. januar 2007 - 08:53 #4
Når jeg oversætter min kode efter at have tilføjet denne linie får jeg 9 fejl.

De første 3 er:
Error    1    error C3861: 'malloc': identifier not found       
Error    2    error C3861: 'free': identifier not found   
Error    3    error C2146: syntax error : missing ';' before identifier 'STR2UPPER'
Avatar billede yates Nybegynder
30. januar 2007 - 12:00 #5
Hvad med følgende som kompilerer helt problemløst som C-kode:

#include <windows.h>
#include <stdlib.h>
char *buffer = 0;
const int STRMAX = 255;



BOOL WINAPI DllMain( HINSTANCE hinstDll,
                          DWORD fdwRreason,
                          LPVOID plvReserved)
{
    switch (fdwRreason)
    {
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        return 1;

        case DLL_PROCESS_ATTACH:
            // Put initialization code here (Run the first time DllOpen is called)
            // for each process
            buffer = (char*)malloc(STRMAX*sizeof(char));
            if( NULL == buffer )
                return 0;
            else
                return 1;

        case DLL_PROCESS_DETACH:
          free(buffer);
          return 1 ;
    }

    return 0;
}


unsigned char* __declspec (dllexport) STR2UPPER(long dummy, unsigned char* argument)
{
    return strcpy( buffer, AnsiUpper(argument));
}
Avatar billede yates Nybegynder
30. januar 2007 - 12:07 #6
Og det er forresten også tilladt at bruge:

unsigned char* FAR PASCAL __declspec (dllexport) STR2UPPER(long dummy, unsigned char* argument)
{
    return strcpy( buffer, AnsiUpper(argument));
}
Avatar billede henrik_dk Nybegynder
30. januar 2007 - 15:35 #7
Med lidt vilje har jeg få compileret koden, men blevet nød til at simplificere koden endnu mere.

Jeg har en del problemer med at få konverteret min usigned char til en string.

Jeg vil godt acceptere Yates forslag, men det kræver et svar :-)

På forhånd tak.
Avatar billede yates Nybegynder
30. januar 2007 - 15:37 #8
Jeg samler ikke point. Bare godt hvis min kommentar hjalp dig i den rigtige retning.
Y.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester