Maudite dll

Signaler
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006
-
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006
-
Je voudrais utiliser des fonctionalités contenues dans une dll.
Supposons que la fonctionalité que je veux utiliser s'appelle aditionnne et que je doit passer deux entiers pour recupérer un resultat (entier).

resultat = aditionne( 3, 5 )

Comment dois je déclaré mon accès à la dll, ou dois je la mettre dans mon source.

Tout cela en vb.net.

Je n'arrive pas à trouver d'exemple concret

Merci

:sad)

11 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
pour faire cela c'est tres simple.
tu met la dll dans ton dossier bin
ensuite tu met au debut de ton fichier .vb
imports namespace où namespace et le namespace de ta dll

exemple : soit le code de la dll le code suivant dans un fichier .vb

Namespace Cyril

Public class Addition
Public function Add(i as integer, j as integer) as integer
return i+j
end Function
end Class

end Namespace

tu compiles ce code et tu obtient une dll

tu met cette dll dans le repertoire bin de ton application web

dans le debut du code .vb ou tu veux utiliser ta dll tu fais :

Imports Cyril

...

et tu pourras faire

dim obj as new Addition
dim resultat as integer = obj.add(1,2)

Normalement je pense rien avoir oublié ;)

Cyril
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

Merci pour ta réponse mais la méthode que tu proposes fonctionne dans le cas ou tu crées toi même la dll. En ce qui me concerne je désire utiliser une dll que l'on me fournit.

:sad)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
c'est la meme chose.
si t'as vs.net dans l'explorateur de solution tu fais ajouter une reference, ensuite au debut du code tu tapes Imports l'intellisens prend le relais tu trouveras le namespace facilement...

Cyril
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

je viens d'essayer mais quand j'importe la dll en reference, j'ai un message d'erreur du syle :

Une reference 'nom de ma dll' n'a pas pu être ajoutée. Il ne s'agit pas d'un assembly ou d'un composant COM. Seuls les assemblys avec l'extension dll et les composants COM peuvent être référencés. Assurez vous que le fichier est accessible et qu'il s'agit d'un assembly valide ou d'un composant.

Je suis décidément pas très bon et je suis bloqué.

Ma dll est faite en delphi dont voici le code :

library Testdll2;

uses
SysUtils,
Classes;

{$R *.res}

function DllCharge : string; stdcall;
begin
DllCharge := 'Dll chargée';
end;

exports
DllCharge;
begin
end.

Mais cette dll fonctionne.

AU SECOURS

:(
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

J'ai trouvé et donc je vous fait partager mon experience.

le code de la dll est devenu:

function DllCharge : integer; stdcall;
begin
DllCharge := 0;
end;

(il est plus simple de passer des entiers que des string)

Il suffit d'ajouter dans le code à la suite des déclarations protected ... :

Private Declare Auto Function ChargeDll Lib "C:\Inetpub\wwwroot\Test\dll\TestDll2.dll" Alias "DllCharge" () As Integer

il n'y a plus qu'a appeler la fonction ChargeDll.

La partie alias est le lien entre le nom de la fonction dans la dll et le lien d'utilisation.

ChargeDll : Nom d'utilisation en vb.net
DllCharge : Nom décrit dans la dll

En revanche, une fois que j'ai utilisé la dll, elle est verouillée et ne peut donc plus être modifié si besoin.

Comment peut on la déverrouiller ?

:)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
ok je pensais que tu avais une dll qui etait fait avec un langage .net, et je pense que ce n'est pas que ce soit le cas (a moins qu'il existe du delphi.net mais la je connais pas)

en ce qui concerne pour deverouiller ta dll, je ne vois pas du tout comment faire

bonne chance

Cyril
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

En tous les cas c'est sympa d'avoir répondu, mais en fait mon problème subsite toujours car la dll finale qu'on m'a fourni est comporte une class que je dois instancier.

J'aurai bien procédé comme tu me la montrer pour ce faire mais j'ai la même problème que sucité.

Donc retour à la case départ mais merci quand même
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
ok :-/

Le code de ta dll est il ecrit en delphi.net, il me semble avoir vu des articles la dessus donc je pense que ca existe. si elle n'est pas ecrite en .net as tu accés au code de cette dll ?

sinon essaye de me faire passer cette dll soit avec un lien si tu en as sinon par email (contact moi par message privé), apres l'avoir recue j'essaierais de tester certains trucs pour voir si je peux faire qqchose.

Je pense aussi a d'autres trucs. tu as que ca comme code dans ta dll ? pourkoi ne pourrais tu pas ecrire ca directement en delphi.net ou meme en vb.net.

si tu peux pas changer ta dll, je pense à une astuce. Tu pourrais essayer de faire du code en delphi.net qui se sert de ta dll et ensuite de te servir de ton code en delphi.net ... car je pense que ca doit etre assez simple de se servir de ta dll avec delphi.net

encore une autre suggestion, avec asp.net tu peux tres bien ecrire ton code en tout langage .net donc aussi en delphi.net pourkoi ne pas ecrire ton code asp.net en delphi.net si tu maitrise celui ci

voila je t'ai donné qq suggestions, sans reponse precise à ton problème

dsl

bon courage

Cyril
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

En fait j'ai voulu faire simple mais je pose ces questions à titre professionnel. La dll que je doit utilisée au final est en c. J'en possède l'interface que je te ferais parvenir si tu le veux bien.

Les demandes du dessus étaient simplifiés pour faire court. Je pensais que les réponses me suffiraient mais ça n'a pas été le cas.

Le code c me décrit une class semble t il. Je doit donc créer une instance de cette class dans mon code mais je ne sais comment faire. Je pourrais te faire parvenir le code demin.

Merci pour le coup de main.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Je comprend ton envie de simplification ;) il me semble avoir vu qqparts un article permettant de faire ca, mais je ne sais plus trop ou, j'essaye de chercher un petit peu, et je te dis si je trouve ca

@+

Cyril
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

Voici l'interface de ma dll

#if !defined(__LXWPROJECTION_H__)
#define __LXWPROJECTION_H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class lxwProjectionI;

class __declspec(dllexport) lxwProjection
{
public:
lxwProjection(void);
~lxwProjection(void);

typedef enum {
LXWPROJSIMPLE,
LXWPROJLAMBERTIIE,
} LXWTYPEPROJECTION;

void CreateProjection(LXWTYPEPROJECTION in_lxwTypeProjection);

void LLtoXY(double in_LatiDeg, double in_LongiDeg, long *out_XDest, long *out_YDest);
void XYtoLL(long in_XSrc, long in_YSrc, double *out_LatiDeg, double *out_LongiDeg);
void LoxodromieLL(double *out_Cap, long *out_Dist, double in_LatiDegA, double in_LongiDegA, double in_LatiDegB, double in_LongiDegB);
void LoxodromieXY(double *out_Cap, long *out_Dist, long in_XA, long in_YA, long in_XB, long in_YB);

protected:
lxwProjectionI* m_pThis;
};

#endif // !defined(__LXWPROJECTION_H__)

Le principe d'utilisation est qu'il faut initialiser la class avec CreateProjection pour que je puisse utiliser la fonction de projection LLtoXY.

Cette dernière procédure n'est ni plus ni moins qu'une procédure de conversion d'un couple de valeurs en un autyre couple de valeurs.

:sad)