我是 ASP.net 互操作功能的新手,所以我这里有一些我需要从我的 asp.net mvc 应用程序调用的非托管 dll。
dll 名称是 CTSerialNumChecksum.dll。我可以使用下面的这两行和我可信赖的响应轻松地从 asp 调用 dll。写一切正常。
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);
}
}
问题:
- 我如何写课程?我发现的大多数例子都没有涉及到类,.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,至少我怀疑它是什么......