Modifier un script pour qu'l passe en DLL

Signaler
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011
-
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010
-
Bonjour,

j'ai ce script:qui marche tres bien mais je voudrais en faire une DLL.

la ou j'ai mis:
"http:l'adresse demandée");

et :
("./Le nom du fichier", je voudrais que ces parametres puissent etre passées sous le nom de variable donc texte.

comme dans cet exemple:#include "dll.h"
#include <windows.h>
export double add(double number1, double number2)
{
return(double)number1+number2;
}

Mais avec des chaines de caracteres:
que faut il mettre a la place de double
number 1 ou 2 pour envoyer l'url et récuperer le résultat

Merci.


Le . exe qui fonctionne:


#include <curl/curl.h>
#include <stdio.h>

int main(int argc, char **argv)
{
/* Initialisation de la session*/
CURL *session = curl_easy_init();
/* On précise l'url qui nous intéresse*/
curl_easy_setopt(session, CURLOPT_URL, "http:l'adresse demandée");
/* On précise le nom de notre fichier destination qui recevra le contenu de la page */
FILE * fp = fopen("./Le nom du fichier", "w");//Création de notre fichier
/* On balance notre pointeur de fichier comme destination */
curl_easy_setopt(session, CURLOPT_WRITEDATA, fp);
/*On précise la fonction qui gèrera l'écriture dans notre fichier.
Peut être n'êtes-vous pas habitués à cela,
il faut mettre un pointeur de fonction en paramètre de curl_easy_setopt.
Comme ça, curl_easy_setopt utilisera cette fonction pointée
pour écrire dans le fichier. La fonction en question doit
respecter la même en-tête que la fonction standard fwrite:
si vous ne voulez pas vous prendre la tête, utilisez fwrite qui est déjà toute prête: */
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, fwrite);
/* lancer le téléchargement */
curl_easy_perform(session);
/*Enfin, on libère nos ressources utilisées */
fclose(fp); // le fichier
/**/
curl_easy_cleanup(session); // la scession
/**/
return 0;
}

17 réponses

Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
93
Hello,
Je comprends pas trop ce que tu veux faire... Mais si tu manipules des chaines de caractères, c'est soit "char *", soit "string"


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Merci, je vais eqssayer avec celà.
en fait ce que je veux faite est de passer en parametres ce quui est dans l'exemple que j'ai trouvé

a la place de double des chaines de caracteres

export double add(double number1, double number2)
{
ce qui est dans le script qui fnctionne (en exe) en passant les parametres a la place de "http:l'adresse demandée") le premier parametre ;

et a la place de "Le nom du fichier" le second parametre.
}

c'est pour appeler la dll a partir d'un autre systeme de programmation (gamemaker)
c'est dur d'être clair.
merci
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

en fait pour que je comprenne faire celà mais avec des chaines de caractres:

#include "dll.h"
#include <windows.h>

export double add(double number1, double number2)
{
return(double)number1+number2;
}
Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
93
export string add(string strAdress)
{
  string strResult;  
  // ton traitement
  return strResult;
}



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Merci beaucoup, je vais essayer celà j'y vois un peu plus clair.

donc si j'ai bien compris:
si j'envoie 2 parametres (ou arguments) je fais pour 2 chaines

export string add(string strAdress, string fichier)
{
string strResult;
// et je fais mon traitement.
return strResult;
}

Merci a ++
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Bon, ça avance mais je n'y arrive pas même en faisant un truc simple (des essais simples)

String n'est pas reconnu sur dev cc+ !
donc il nr voulait pas compiler.

j'ai vu je ne sais plus où qu'il fallait ajouter:

#include <string>
using namespace std;

j'appelle bien ma dll depuis mon programme mais soit elle me reenvoie dans le premier cas toujours les mêmes caracteres quelque soit l'entrée t si j'essaye de concaténer ça plante.

#include "dll.h"
#include <windows.h>
#include <string>

using namespace std;

export string recs(string Adress, string Fichier)
{
string Result ;

// essais simples.

Result = "aazdernccv" ; // avec celui là j'ai toujours la même serie de quelques caracteres quelque soit le contenu de Result

//Result= (Adress + Fichier); // si je met celà ça ne ressort plus

return Result;
}

si Quelqun a une idée?
il doit me manquer une bibliotheque ou je ne sais quoi

Merci.
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Voilà, j'ai un peu trouvé.

en fait,

#include <curl/curl.h>
#include <stdio.h>

int main(int argc, char **argv)

export char recs(char Adress, char Fichier)
{
mon boulot en utilisant char.
)

je peux donc appeler ma dll depuis mn programme en GM.

Il me reste un souci qui est que:
curl_easy_setopt(session, CURLOPT_URL, "http:l'adresse demandée");
n'accepte pas les variables

mais celà est une autre histoire si besoin je ferai un autre post pour celçà.

Merci encore.
Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
93
Attention!
char = un seul caractère
char * = une chaine de caractères


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour Bruno,

j'ai eu une lueur d'espoir mais Non.
avec ou sans * c'est le même bisness!
de toutes façons, j'ai vu sur un site (traduit) que avec curl_easy on ne peut pas mettre de variables a la place chaines de caracteres.

Ce serait peut etre possible avec mais pas en Easy mais je n'ai rien compris a leurs pages en Anglais.

Ce que je voudrais faire est de passer l'adresse http et que au retour ca me donne la source en chaine de caractere (même pas en fichier) sans plus.

Je conais bien des DLL toutes faites:
netread.dll mais certaines pages ne pasent pas.

Wget.exe (et son code source)mais je n'ai pas les entrées et en tant que batch (au pire) je ne connais que -S qui renvoie un fichier pas une chaine.

également 39.dll (et sa source) IDEM je ne trouve pas les entrées
ces sources sont trop pour moi helas.
je vais devoir abandonner.

A++ merci
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010

Bonjour Galamot,

Je ne sais pas si ça peut te servir, mais tu peux prendre ta fonction transformée en caractères sur mon site :

http://bernard.mouille.free.fr/ZD00000069/000002.html

Bernard
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Merci, je prends note.

Toutefois, depuis le temps, j'ai un peu trouvé autrement (l'exemple de l'addition etait pour si je me souviens bien expliquer comment avec mon systeme on passe et on recupere les parametres.

en ce moment, je serais plus sur un calcul qui es:

Distance = 6378 * (ArcCos( sin(latt2) * sin(latt1) + cos(long2 - long1) * cos(latt2) * cos(latt1)))

( il faut retourner distance en envoyant latt1 long1 et latt2 long2 )
en c++
tres amateur je n'arrive pas a l'ecrire pour que la compil marche.

A ++
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010

Bonjour,

Avec DEV-C++, en mode console, peux-tu vérifier en changeant les valeurs si ça fonctionne correctement ( peut-être faut t'il rajouter des parenthèses pour les calculs) ?

Code du cpp :

#include <cstdlib>
#include
#include <stdio.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
double Distance;
double Latt1 = 1000;
double Latt2 = 2000;
double Long1 = 3000;
double Long2 = 4000;


Distance = 6378 * acos( sin(Latt2) * sin(Latt1) + cos (Long2 - Long1) * cos(Latt2) * cos(Latt1) );
cout << Distance
<< endl;

/*
Distance = 6378 * (ArcCos( sin(latt2) * sin(latt1) + cos(long2 - long1) * cos(latt2) * cos(latt1)))
*/



system("PAUSE");
return EXIT_SUCCESS;
}

@+

Bernard
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour,

Jai fait quelques essais en mode console, les calculs marchent.
En fabrication de dll export ça ne veut pas compiler!

Ou sont les erreurs?
MERCI

/////
DANS DLL.H je met:

#ifndef _DLL_H_

#define _DLL_H_

/* Début de la définition de l'utilisateur pour créer une DLL export*/

#define export extern "C" __declspec (dllexport)

/* fin de la définition de l'utilisateur */

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


class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);

private:

};


#endif /* _DLL_H_ */

//////////////

DANS DLLMAIN.CPP je met:

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <cstdlib>
#include
#include <stdio.h>
#include <math.h>


export double dist (double latt1, double long1, double latt2, double long2)

/*
si le calcul a retourner est:
6378 * (ArcCos( sin(latt2) * sin(latt1) + cos(long2 - long1) * cos(latt2) * cos(latt1)))
*/

{

return(double) 6378 * (acos( sin(Latt2) * sin(Latt1) + cos (Long2 - Long1) * cos(Latt2) * cos(Latt1)));
}
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010

Bonjour,

Essaye avec ce code, cela fonctionne avec dBasePlus en lançant :

IF TYPE("dist") <> "FP"
EXTERN CDOUBLE dist(CDOUBLE, CDOUBLE, CDOUBLE, CDOUBLE) NomDeLaDll.dll
ENDIF
? dist(1000, 1100, 2000, 2200)

// dll.h
// *****
#ifndef _DLL_H_
#define _DLL_H_

/* Début de la définition de l'utilisateur */
#define export extern "C" __declspec (dllexport)
/* fin de la définition de l'utilisateur */

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

class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);
private:
};
#endif /* _DLL_H_ */

// dllmain.cpp
// ***********
#include "dll.h"
#include <windows.h>
#include <math.h>
using namespace std;

export double dist(double latt1, double long1, double latt2, double long2)
{
double Distance;
Distance = 6378 * (acos( sin(Latt2) * sin(Latt1) + cos (Long2 - Long1) * cos(Latt2) * cos(Latt1)));
return(double) Distance;
}
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010

Attention, ne pas mettre de majuscules aux variables latt1,latt2 etc...
Messages postés
30
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
5 mars 2011

Bonsoir,

Merci Bernard (celà me fait penser a une emiion de TV)

la compil a marché,
Effectivemet, il y avait (en plus les majuscules) donc "casse"

je regarde les différences et il est des lignes que j'ai posées parce que écrites, come celà est pour comprendre au cas où mais cette solution sera utile

Merci.

je teste avec mon système de programmation mais je suis sur que celà va marcher d'enfer.

Je te donne des nouveles du résultat (je suis confient) dès que possible.

En tous cas, a toi, Ta famille, tes Amis , aux amis de tous les Forums, aux animateurs de TOUS les sites de toute envergure, au Monde entier sur cette toile en fait...
Joyeuses Fêtes de Fin d'année.

Jacques
Messages postés
6
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
16 décembre 2010

Bonsoir Jacques,

Merci de tes voeux, à mon tour, je te présente les miens pour ces fêtes de fin d'année.

Je débute en C++ et j'ai été heureux de pouvoir t'aider.

A bientôt

Bernard