代码之家  ›  专栏  ›  技术社区  ›  Steven

声明的dll函数的行为不一致

  •  0
  • Steven  · 技术社区  · 15 年前

    为什么我会 GetRawData 声明的函数在从我的VB.NET应用程序调用时返回正确的值,但在从我的ASP.NET页调用时返回零?

    除了类类型差异(窗体/页)和调用事件处理程序(Form1_Load、Page_Load)之外,代码完全相同。

    注意:在实际代码中,dll和raw data file分别是我的dll和原始数据文件的绝对文件名。

    注意:该dll文件不是由Visual Studio创建的。

    Fuff1.VB

    Public Class Form1
    
        Declare Auto Function GetRawData Lib "#DLL#" (ByVal filename() As Byte, _
                                                      ByVal byteArray() As Byte, _
                                                      ByVal length As Int32) As Int32
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, _
                               ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim buffer(10485760) As Byte
            Dim msg As String, length As Integer = 10485760
            Dim filename As String = "#RAWDATAFILE#"
            length = GetRawData(Encoding.Default.GetBytes(filename), buffer, length)
    

    Abx.VB

    Partial Public Class _Default
        Inherits System.Web.UI.Page
    
        Declare Auto Function GetRawData Lib "#DLL#" (ByVal filename() As Byte, _
                                                      ByVal byteArray() As Byte, _
                                                      ByVal length As Int32) As Int32
    
    
        Protected Sub Page_Load(ByVal sender As Object, _
                                ByVal e As System.EventArgs) Handles Me.Load
    
            Dim buffer(10485760) As Byte
            Dim msg As String, length As Integer = 10485760
            Dim filename As String = "#RAWDATAFILE#"
            length = GetRawData(Encoding.Default.GetBytes(filename), buffer, length)
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Tim Lloyd    15 年前

    尝试将您的dll和文件放入ASP.NET bin目录并从中引用它。由于安全问题,DLL可能正在静默失败。

        2
  •  1
  •   Michael Burr    15 年前

    略低于随机猜测:ASP.NET进程没有权限打开由指定的文件 "#RAWDATAFILE#"

        3
  •  1
  •   Hans Passant    15 年前

    此dll函数似乎采用了一个文件名,并将文件中的一些数据返回到缓冲区中。不指定文件的完整路径,“rawdatafile”将是相对路径。这在ASP.NET页面中工作的几率非常小。请改为指定完整路径(如“c:\blah\something.txt”而不是“something.txt”)。

    许多其他可能的故障模式。与dll路径类似,以及ASP.NET帐户是否具有访问这些文件所需的权限。