Как перенести этот неуправляемый код из asp в asp.net 2 / mvc? - PullRequest
0 голосов
/ 07 апреля 2010

Я новичок в особенностях взаимодействия с ASP.net, поэтому у меня есть несколько неуправляемых dll, которые мне нужно вызывать из моего приложения asp.net mvc.

имя dll - CTSerialNumChecksum.dll. Я могу легко вызвать DLL из ASP, используя только эти две строки ниже и из моего верного ответа. пиши все работает нормально.

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

Я знаю, что это неуправляемо, потому что, когда я пытаюсь добавить ссылку на DLL, это не работает. я пытаюсь следовать некоторым учебникам по взаимодействию и маршаллингу, но пока не смог заставить работать код.

Я пытаюсь обернуть объект в другой статический класс и просто позволить остальной части приложения вызывать код. так что не уверен, почему так сложно заставить его работать в asp.net или что я просто идиот arggghhh ..

using System;
using System.Runtime.InteropServices;

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

    }
}

Вопросы:

  1. Как мне написать класс? Большинство примеров, которые я нашел, не касались класса, части .CRC32API, и тех, которые действительно кажутся странными
  2. И какой инструмент я могу использовать для идентификации какой тип DLL конкретного файла то есть неуправляемый c ++ и т. д.
  3. Также я собираюсь использовать jquery для сделать вызов Ajax позже, чтобы я мог использовать это чтобы подтвердить мою форму предварительной подачи. Есть ли лучший способ справиться это?

Вызов Dumpbin вернул мне это, не знаю, почему я не могу видеть имя функции validate внутри:

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

Обновление:

Может ли это быть из-за искажения имени? поскольку это C ++ DLL, по крайней мере, я подозреваю, что это в любом случае ...

1 Ответ

3 голосов
/ 08 апреля 2010

Это COM-объект. Я могу сказать, потому что Server.CreateObject() в ASP - это способ создания COM-объекта. DllRegisterServer и т. Д. В DLL также являются контрольными признаками.

Вы хотите использовать объект COM из .NET. Вы можете сделать это, сгенерировав сборку взаимодействия во время компиляции, запустив инструмент tlbimp.exe . По сути, это автоматически делает то, что вы пытались сделать вручную. Затем скомпилируйте ваш код с полученной сборкой.

Что касается части jQuery - я думаю, вы должны оставить это в совершенно отдельном вопросе.


ps: я не знаю, что делает этот CRC32API, но есть реализации CRC32, доступные в C # . Вы можете рассмотреть возможность повторной реализации любой функции в этом COM-объекте, во всем управляемом коде. Это устранит необходимость в tlbimp.exe во время компиляции и регистрации COM-объекта во время выполнения.

...