C# 是否可以在ASP.NET网站中调用非托管代码?

C# 是否可以在ASP.NET网站中调用非托管代码?,c#,asp.net,vb.net,C#,Asp.net,Vb.net,在我的ID卡读取应用程序中,我正在导入一些非托管代码(dll)进行身份验证。我无法导入此DLL。我没有收到任何错误,但DLL没有得到导入,无法访问。当它在web应用程序中完成时,它是在Windows窗体中工作的。我没有得到输出。关于如何使用它,我能有一些想法或例子吗? 这是我的密码: /// <param name="readerNumber">The reader number.</param> [DllImport("EIDReader.dll",

在我的ID卡读取应用程序中,我正在导入一些非托管代码(dll)进行身份验证。我无法导入此DLL。我没有收到任何错误,但DLL没有得到导入,无法访问。当它在web应用程序中完成时,它是在Windows窗体中工作的。我没有得到输出。关于如何使用它,我能有一些想法或例子吗? 这是我的密码:

 /// <param name="readerNumber">The reader number.</param>
        [DllImport("EIDReader.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        internal static extern void InitSelectedReaderEx(ManagerData data, int readerNumber);

[DllImport("EIDReader.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool ReadSISCard([In, Out] SISRecord identity);
///读卡器编号。
[DllImport(“EIDReader.dll”,CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
内部静态外部void InitSelectedReaderEx(ManagerData数据,int readerNumber);
[DllImport(“EIDReader.dll”,CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
[返回:Marshallas(UnmanagedType.Bool)]
内部静态外部bool ReadSISCard([In,Out]SISRecord identity);

您要引用的库是COM库吗?如果是这样,那么您需要为它创建一个COM包装DLL。请查看工具,该工具将创建一个可在ASP.NET应用程序中引用的包装DLL。

您要引用的库是COM库吗?如果是这样,那么您需要为它创建一个COM包装DLL。请查看工具,它将创建一个可在ASP.NET应用程序中引用的包装DLL。

C#/Winforms加载DLL的方式与ASP.NET的工作方式不同

C#winforms在.NETVM中执行,ASP.NET(也在.NETVM上运行)在IIS中被沙盒化

您必须首先dll加载到内存中,然后调用所需的方法


请参见此处的教程

C#/Winforms加载DLL的方式与ASP.NET的工作方式有所不同

C#winforms在.NETVM中执行,ASP.NET(也在.NETVM上运行)在IIS中被沙盒化

您必须首先dll加载到内存中,然后调用所需的方法


请参见此处的教程

答案是肯定的,但要想做得更好,您需要找出问题所在,并将此信息添加到问题中(异常类型/文本,…)您的asp.net网站是否引用了dll?Aniket,是的,它是ReferredAlexei,我理解您的。FYI@Muthuramdll文件在哪里?什么文件夹?答案是肯定的,但为了更好地解决问题,您需要找出问题所在,并将此信息添加到问题中(异常类型/文本…)您的asp.net网站是否引用了dll?Aniket,是的,它被引用Alexei,我理解您的。FYI@Muthuramdll文件在哪里?什么文件夹?+1。手动加载本机DLL的良好链接/建议。我稍微反对Winform/ASP.Net的比较:Winforms和ASP.Net在加载DLL方面没有区别,而是从哪些路径加载本机DLL-在Winforms的情况下,默认路径(可执行文件旁边)通常包含自定义本机映像,但是在ASP.Net的情况下,默认情况下不会搜索管理DLL的正常位置。Aniket,Alexei默认情况下,DllImport仅引用应用程序路径或系统Win32。@对于Winforms,默认搜索目录为当前目录,后跟system32。对于asp.net,它是
\system32\inetsrv
+1。手动加载本机DLL的良好链接/建议。我稍微反对Winform/ASP.Net的比较:Winforms和ASP.Net在加载DLL方面没有区别,而是从哪些路径加载本机DLL-在Winforms的情况下,默认路径(可执行文件旁边)通常包含自定义本机映像,但是在ASP.Net的情况下,默认情况下不会搜索管理DLL的正常位置。Aniket,Alexei默认情况下,DllImport仅引用应用程序路径或系统Win32。@对于Winforms,默认搜索目录为当前目录,后跟system32。对于asp.net,它是
\system32\inetsrv