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 :
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 :
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 :
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 :
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,
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.
Partager