Como transfiro esse código não gerenciado do ASP para o ASP.NET 2/MVC?
-
25-09-2019 - |
Pergunta
Sou um novato nos recursos de interop asp.net, então o que tenho aqui é uma DLL não gerenciada que eu preciso ligar do meu aplicativo ASP.NET MVC.
O nome da DLL é ctseialnumChecksum.dll. Posso chamar a DLL facilmente da ASP usando apenas as duas linhas abaixo e da minha resposta confiável. Escreva tudo está funcionando bem.
set CheckSumObj = Server.CreateObject("CTSerialNumChecksum.CRC32API")
validSno = CheckSumObj.ValidateSerialNumber(no)
Sei que não é gerenciado porque, quando tento adicionar referência à DLL, não funciona. Eu tento seguir alguns tutoriais sobre interope e marechalling, mas até agora não consegui fazer o código funcionar.
Estou tentando envolver o objeto em outra classe estática e apenas deixar o restante do aplicativo chamar o código. Portanto, não sei por que é tão difícil fazê -lo funcionar no ASP.net ou que eu sou apenas um idiota Arggghhh ..
using System;
using System.Runtime.InteropServices;
namespace OnlineRegisteration.Models
{
public static class SerialNumberChecksum
{
[DllImport("CTSerialNumChecksum")]
public static extern int ValidateSerialNumber(string serialNo);
}
}
Perguntas:
- Como faço para escrever a aula? A maioria dos exemplos que encontrei não envolveu a classe, a parte .crc32api, E aqueles que fazem parece esquisito
- E que ferramenta posso usar para identificar que tipo de DLL é um arquivo específico, ou seja, C ++ não gerenciado, etc?
- Além disso, pretendo usar o jQuery para fazer o Ajax Chamada mais tarde, para que eu possa usar isso para validar meu formulário pré-submissão. Existe uma maneira melhor de lidar com isso?
O Dumpbin Call me devolveu isso, não sei por que não consigo ver o nome da função Validate dentro:
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
Atualizações:
Isso poderia ser devido ao nome de Mangling? Como é uma DLL C ++, pelo menos o que eu suspeito ser de qualquer maneira ...
Solução
É um objeto COM. Eu posso dizer porque Server.CreateObject()
no ASP é o caminho para instanciar um objeto COM. O DllRegisterServer e assim por diante na DLL, também são sinais reveladores.
Você quer Use o objeto COM do .NET. Você pode fazer isso gerando uma montagem de interop, no momento da compilação, executando a ferramenta tlbimp.exe. Basicamente, isso faz, automaticamente, o que você estava tentando fazer manualmente. Em seguida, compila seu código com o conjunto resultante.
Quanto à parte do jQuery - acho que você deve deixar isso para uma pergunta completamente separada.
PS: Eu não sei o que essa coisa do CRC32API faz, mas Existem implementações CRC32 disponíveis em C#. Você pode considerar reimplementar qualquer função nesse objeto COM, em código completo. Ele eliminaria a necessidade de tlbimp.exe no momento da compilação e o registro do objeto COM em tempo de execução.