Avatar billede bomann Nybegynder
30. juni 2006 - 12:08 Der er 11 kommentarer og
1 løsning

Kald C# DLL fra ASP

Jeg har lavet en DLL i C# - se nedenstående kode* - og registreret denne med regasm.exe. Den figurerer godt nok i listen over COM i Visual Studio, men i ASP får jeg følgende fejl:

Fejltype:
Serverobjekt, ASP 0177 (0x80070002)
80070002
/Default.asp, line 7

Kaldet i ASP ser ud som følger:

set myDLLThing = server.createobject("ClassTestHelloWorld.Class1")

response.write myDLLThing.SayHello()

Hvad søren i hatten gør jeg forkert???


DLL kode*

using System;
using System.Collections.Generic;
using System.Text;

namespace ClassTestHelloWorld
{
    [System.Runtime.InteropServices.Guid("2B33F918-8376-4156-A416-929A57572C3E")]
    [System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
    [System.Runtime.InteropServices.ComVisible(true)]



    public class Class1
    {
        [System.Runtime.InteropServices.DispId(10)]

        public string SayHello()
        {
            return "Hello World";
        }
    }
}
Avatar billede verakso Nybegynder
30. juni 2006 - 21:59 #1
Jeg har sikker snork sovet da der blev gennemgået hvordan man kan bruge .NET programmer i gamle VB/ASP applikationer, men mig bekendt kan det ikke lade sig gøre som her.

Jeg mener at den approach der er til at kalde .NET kode (eks. C#) i en ASP/VBScript løsning er at bruge SOAP interfacet og lave .NET koden som en WebService
Avatar billede arne_v Ekspert
01. juli 2006 - 05:22 #2
Det kan godt lade sig gøre.

ASP/VBS og diverse andre ældre teknologier kan kalde COM komponenter.

.NET kan expose COM interfaces.

COM virker på tværs af teknologier så managed unmanaged er ikke et problem.

Eneste problem er at selvom alle Windows brugere bruger COM i store mængder
og enhver ASP eller VB6 programmør kan kalde COM komponenter så er der næsten
ingen som forstår COM mystiske verden.
Avatar billede arne_v Ekspert
01. juli 2006 - 05:23 #3
Følgende eksempel virker.

Det er *ikke* et godt COM eksempel, men lavet til at vise det ønskede ASP/VBS->C#
nemmest muligt.
Avatar billede arne_v Ekspert
01. juli 2006 - 05:23 #4
using System;
using System.Reflection;

[assembly:AssemblyKeyFile("NCOM.snk")]
namespace Demo
{
    public class Classic
    {
        public string GetHelloWorld()
        {
            return "Hello world 1 !";
        }
        public string HelloWorld
        {
            get
            {
                return "Hello world 2 !";
            }
        }
    }
}
Avatar billede arne_v Ekspert
01. juli 2006 - 05:23 #5
csc /t:library /o+ Demo.cs
regasm Demo.dll
gacutil /i Demo.dll
Avatar billede arne_v Ekspert
01. juli 2006 - 05:24 #6
<%
Set demo = CreateObject("Demo.Classic")
Response.Write demo.GetHelloWorld()
Response.Write "<br>"
Response.Write demo.HelloWorld
%>
Avatar billede arne_v Ekspert
01. juli 2006 - 05:25 #7
assembly:AssemblyKeyFile
regasm
gacutil
Avatar billede arne_v Ekspert
01. juli 2006 - 05:26 #8
det sidste er de 3 ting som "skal til"
Avatar billede verakso Nybegynder
01. juli 2006 - 14:07 #9
Du har ret - jeg sov vist en del men ikke under hele sceancen.
Det var specielt den del med at installere DLL'en i GAC'en der var smuttet et øjeblik.
Avatar billede bomann Nybegynder
03. juli 2006 - 10:22 #10
Hvad er problemet med det eksempel jeg har postet?
Avatar billede arne_v Ekspert
03. juli 2006 - 13:33 #11
ingenting formentlig

jeg tror bare at du mangler at bruge sn og gacutil

(jeg valgte så at bruge en attribut i koden fremfor sn)
Avatar billede arne_v Ekspert
13. august 2006 - 23:00 #12
OK ?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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