我是ASP.net互操作功能的新手,所以我在这里有一些非托管的dll,我需要从我的asp.net mvc应用程序调用。
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);
}
}
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,至少我怀疑它是无论如何......
答案 0 :(得分:3)
它是一个COM对象。我可以告诉你,因为ASP中的Server.CreateObject()
是实例化COM对象的方式。 DLL中的DllRegisterServer等也是明显的标志。
您想要use the COM object from .NET.您可以通过运行the tlbimp.exe tool在编译时生成互操作程序集来实现。基本上,这会自动完成您手动尝试的操作。然后使用生成的程序集编译代码。
至于jQuery部分 - 我认为你应该把它留给一个完全独立的问题。
ps:我不知道CRC32API做了什么,但是there are CRC32 implementations available in C#。您可以考虑在所有托管代码中重新实现该COM对象中的任何函数。它将在编译时消除对tlbimp.exe的需要,并在运行时注册COM对象。