Bonjour,

Je souhaite pouvoir utiliser dans une page ASP, une dll généré en C#.

Pour cela, j'ai créé une DLL de test, dont le code est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
using System;
using System.Runtime.InteropServices;
 
namespace MyDLL {
 
    [ComVisible(true)]
    public class Operations {
 
        [ComVisible(true)]
        public string getValue1( string sParameter ) {
            switch (sParameter) {
                case "a":
                    return "A was chosen";
 
                case "b":
                    return "B was chosen";
 
                case "c":
                    return "C was chosen";
 
                default:
                    return "Other";
            }
        }
 
        public string getValue2() {
            return "From VBS String Function";
        }
    }
}
Avec pour assembly :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// Les informations générales relatives à un assembly dépendent de 
// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations
// associées à un assembly.
[assembly: AssemblyTitle("MyDLL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Hewlett-Packard Company")]
[assembly: AssemblyProduct("MyDLL")]
[assembly: AssemblyCopyright("Copyright © Hewlett-Packard Company 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 
// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 
// COM, affectez la valeur true à l'attribut ComVisible sur ce type.
[assembly: ComVisible(true)]
 
// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
[assembly: Guid("a9a02baa-1de9-43be-8df0-147f0c371c67")]
 
// Les informations de version pour un assembly se composent des quatre valeurs suivantes*:
//
//      Version principale
//      Version secondaire 
//      Numéro de build
//      Révision
//
// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 
// en utilisant '*', comme indiqué ci-dessous*:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Après génération de la dll, j'ai l'ai enregistré avec regasm.exe, via la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
regasm MyDLL.dll /codebase
Et j'ai eu le message suivant : Inscription des types réussie.

En base de registre, la dll est bien enregistrée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
[HKEY_CLASSES_ROOT\MyDLL.Operations]
@="MyDLL.Operations"
 
[HKEY_CLASSES_ROOT\MyDLL.Operations\CLSID]
@="{0A42BA99-B4E1-356B-947E-EAC337F3B243}"
Mais lorsque j'exécute ma page asp,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ language="javascript" %>
 
<!DOCTYPE html>
<html>
<body>
<%
try{
	var myDll = Server.CreateObject("MyDLL.Operations");  
	Response.Write("2 : " + myDll.getValue1("a")) ;
	Response.Write("2 : " + myDll.getValue2());
}catch(err){
	Response.write(err.message);
}
%>
</body>
</html>
mon navigateur affiche ce message à l'écran :
Un composant ActiveX ne peut pas créer un objet

J'ai du rater une étape lors de la création et/ou de l'enregistrement de la dll, met je n'arrive pas à savoir laquelle.
Auriez-vous une idée ?

Peut être une piste, je ne trouve pas la clé {0A42BA99-B4E1-356B-947E-EAC337F3B243} dans la clé de registre [HKEY_CLASSES_ROOT\CLSID].

Merci pour votre aide.