Question

Je suis un débutant à ASP.net fonctionnalités Interop, donc ce que j'ai est ici une dll non gérée que je dois appeler de mon asp.net application mvc.

le nom dll est CTSerialNumChecksum.dll. je peux facilement appeler le dll de asp en utilisant seulement ces deux lignes ci-dessous et de ma réponse fidèle. écriture tout fonctionne bien.

set CheckSumObj = Server.CreateObject("CTSerialNumChecksum.CRC32API")
validSno        = CheckSumObj.ValidateSerialNumber(no)

Je sais qu'il est non géré parce que quand je tente d'ajouter une référence à la dll ne fonctionne pas. J'essaie de suivre quelques tutoriels sur Interop et marshalling mais jusqu'ici je n'ai pas pu obtenir le code de travail.

Je suis en train d'envelopper l'objet dans une autre classe statique et laisser le reste de l'application d'appeler le code. donc je ne sais pourquoi est-il si difficile de le faire fonctionner en asp.net ou que je suis un idiot Arggghhh ..

using System;
using System.Runtime.InteropServices;

namespace OnlineRegisteration.Models
{
    public static class SerialNumberChecksum
    {
        [DllImport("CTSerialNumChecksum")]
        public static extern int ValidateSerialNumber(string serialNo);

    }
}

Questions:

  1. Comment puis-je écrire la classe? exemple le plus je l'ai trouvé ne comportait pas la classe, la partie .CRC32API, et ceux qui semble difficile Freaky
  2. Et quel outil puis-je utiliser pour identifier quel type de dll un fichier particulier est, à savoir non géré c ++, etc?
  3. Je compte aussi utiliser jquery à faire appel ajax plus tard donc je peux l'utiliser pour valider ma forme pré-soumission. Y at-il une meilleure façon de gérer cela?

Dumpbin appel m'a rendu ce, ne sais pas pourquoi je ne peux pas voir le nom de la fonction de validation à l'intérieur:

File Type: DLL

  Section contains the following exports for CTSerialNumChecksum.DLL

    00000000 characteristics
    3D75BB53 time date stamp Wed Sep 04 15:50:43 2002
        0.00 version
           1 ordinal base
           4 number of functions
           4 number of names

    ordinal hint RVA      name

          1    0 000015CB DllCanUnloadNow
          2    1 000015D7 DllGetClassObject
          3    2 000015F1 DllRegisterServer
          4    3 00001601 DllUnregisterServer

  Summary

        5000 .data
        2000 .rdata
        2000 .reloc
        2000 .rsrc
        8000 .text

Mises à jour:

Serait-ce dû à mutiler nom? comme il est un c ++ dll, au moins ce que je pense qu'il est de toute façon ...

Était-ce utile?

La solution

Il est un objet COM. Je peux dire parce que Server.CreateObject() en ASP est le moyen d'instancier un objet COM. Le DllRegisterServer et ainsi de suite dans la DLL, sont également des signes avant-coureurs.

Vous voulez utiliser l'objet COM à partir de .NET. vous pouvez le faire en générant un ensemble de Interop, au moment de la compilation, en exécutant le tlbimp outil .exe . En gros, cela, automatiquement, ce que vous essayez de le faire manuellement. Ensuite, compiler votre code avec l'assemblage obtenu.

En ce qui concerne la partie jQuery - Je pense que vous devriez laisser cela à une question complètement distincte.


ps: Je ne sais pas ce que chose CRC32API fait, mais il sont mises en œuvre CRC32 disponibles en C # . Vous pourriez envisager de réimplémenter quelle que soit la fonction est dans cet objet COM, dans le code tout géré. Il éliminerait la nécessité d'tlbimp.exe au moment de la compilation et l'enregistrement de l'objet COM à l'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top