为什么我的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)
答案 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可能会无声地失败。