Как мне передавать этот неуправляемый код из ASP в ASP.NET 2 / MVC?
-
25-09-2019 - |
Вопрос
Я новичок в функциям взаимодействия 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);
}
}
Вопросы:
- Как я могу написать класс? Большинство примеров, которые я нашел, не включал в себя класс, деталь .crc32api, и те, которые кажутся причудливыми
- А какой инструмент я могу использовать для определения того, какой тип DLL есть конкретный файл, то есть неуправляемый C ++ и т. Д.?
- Также я намерен использовать 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 во время выполнения.