如何将此非托管代码从 asp 传输到 asp.net 2/mvc?
-
25-09-2019 - |
题
我是 ASP.net 互操作功能的新手,所以我这里有一些非托管 dll,我需要从我的 asp.net mvc 应用程序调用它们。
dll 名称为 CTSerialNumChecksum.dll。我可以使用下面的这两行和我可靠的响应轻松地从 asp 调用 dll。写一切工作正常。
set CheckSumObj = Server.CreateObject("CTSerialNumChecksum.CRC32API")
validSno = CheckSumObj.ValidateSerialNumber(no)
我知道它是非托管的,因为当我尝试添加对 dll 的引用时它不起作用。我尝试遵循一些有关互操作和编组的教程,但到目前为止我无法使代码正常工作。
我试图将对象包装到另一个静态类中,然后让应用程序的其余部分调用代码。所以不知道为什么让它在 ASP.NET 中工作如此困难,或者我只是一个白痴 argggghhh..
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稍后进行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
更新:
这可能是由于名称修改造成的吗?因为它是一个 c++ dll,至少我怀疑它是......
解决方案
它是一个 COM 对象。我可以说因为 Server.CreateObject()
在ASP中是实例化COM对象的方式。DLL中的DllRegisterServer等也是明显的标志。
你想要 使用.NET 中的 COM 对象。 您可以通过在编译时生成互操作程序集来完成此操作,方法是运行 tlbimp.exe 工具. 。基本上,这会自动完成您尝试手动执行的操作。然后使用生成的程序集编译代码。
至于 jQuery 部分 - 我认为你应该把它留给一个完全独立的问题。
附:我不知道 CRC32API 的作用是什么,但是 C# 中有可用的 CRC32 实现. 。您可能会考虑在全托管代码中重新实现该 COM 对象中的任何功能。它将消除编译时对 tlbimp.exe 的需要,以及运行时 COM 对象的注册。
不隶属于 StackOverflow