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

时间:2010-05-21 17:11:21

标签: .net vb.net dll

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

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

注意:在实际代码中,#DLL#和#RAWDATAFILE#分别是我的DLL和原始数据文件的绝对文件名。

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

Form1.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)

Default.aspx.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 个答案:

答案 0 :(得分:1)

略少于随机猜测:ASP.NET进程无权打开"#RAWDATAFILE#"指定的文件

答案 1 :(得分:1)

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

许多其他可能的故障模式。与DLL路径一样,asp.net帐户是否具有访问这些文件的必要权限。

答案 2 :(得分:1)

尝试将您的dll和文件放在ASP.Net bin目录中并从那里引用它。由于安全问题,DLL可能会无声地失败。