この管理されていないコードをASPからASP.NET 2/MVCに転送するにはどうすればよいですか?
-
25-09-2019 - |
質問
私はASP.NET Interop機能の初心者なので、ここにあるのは、ASP.NET MVCアプリから電話する必要がある管理されていないDLLです。
dll名はctserialnumchecksum.dllです。以下の2行だけを使用して、信頼できる応答からASPからDLLを簡単に呼び出すことができます。すべてが正常に機能していると書いてください。
set CheckSumObj = Server.CreateObject("CTSerialNumChecksum.CRC32API")
validSno = CheckSumObj.ValidateSerialNumber(no)
私はそれが管理されていないことを知っています。なぜなら、DLLへの参照を追加しようとすると機能しないからです。 InteropとMarshallingに関するいくつかのチュートリアルに従うようにしていますが、これまでのところ、コードを機能させることができませんでした。
オブジェクトを別の静的クラスにラップし、アプリの残りの部分にコードを呼び出すようにしようとしています。だから、なぜそれを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 ++などを特定するために、どのツールを使用できますか?
- また、後でAjaxコールを行うためにjQueryを使用して、これを使用してフォームの事前補給を検証できるようにするつもりです。これを処理するより良い方法はありますか?
Dumpbin Callは私にこれを返しましたが、なぜ私は内部に検証済みの関数名が見えない理由がわかりません:
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オブジェクトを使用します。 コンパイル時に、実行することで、Interopアセンブリを生成することで、それを行うことができます tlbimp.exeツール. 。基本的に、これは自動的に、手動でやろうとしていたことです。次に、結果のアセンブリでコードをコンパイルします。
jqueryの部分については、それを完全に別々の質問に任せるべきだと思います。
PS:そのCRC32APIが何をするのかわかりませんが、 C#で利用可能なCRC32の実装があります. 。すべてが管理されたコードで、そのcomオブジェクトにある関数を再実装することを検討する場合があります。コンパイル時にtlbimp.exeの必要性と、実行時にcomオブジェクトの登録が排除されます。