Как мне передавать этот неуправляемый код из ASP в ASP.NET 2 / MVC?

StackOverflow https://stackoverflow.com/questions/2590466

Вопрос

Я новичок в функциям взаимодействия ASP.NET, поэтому то, что у меня есть здесь, - это некоторая неуправляемая DLL, которую мне нужно позвонить из моего приложения ASP.NET MVC.

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

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

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

Я пытаюсь обернуть объект в другой статический класс и просто позволить остальным приложению вызывать код. Так что не уверен, почему так трудно заставить его работать в ASP.NET или что я просто идиот Арггхе ..

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 Do Call ajax позже, поэтому я могу использовать это, чтобы подтвердить для подтверждения моей формы. Есть ли лучший способ справиться с этим?

Вызов Dumpbin вернул мне это, не уверен, почему я не вижу проверку функции функции внутри:

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

Обновления:

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

Это было полезно?

Решение

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

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

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


PS: я не знаю, что делает что делает CRC32API, но Доступны реализации CRC32 в C #. Отказ Вы можете рассмотреть возможность повторной реализации любой функции в этом COM-объекте, во всем управляемом коде. Он устраняет потребность в TLBIMP.EXE во время компиляции, а также регистрация объекта COM во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top