Непоследовательное поведение от объявленной функции DLL - PullRequest
0 голосов
/ 21 мая 2010

Почему моя объявленная 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 ]

1 голос
/ 21 мая 2010

Эта функция DLL, по-видимому, берет имя файла и возвращает некоторые данные из файла в буфер. Вы не указываете полный путь к файлу, "# rawdatafile #" будет относительным путем. Вероятность того, что это работает на странице asp.net, очень мала. Вместо этого укажите полный путь (например, «c: \ blah \ something.txt» вместо «thing.txt »).

Множество других возможных режимов отказа. Как путь к DLL и наличие у учетной записи asp.net необходимых прав для доступа к этим файлам.

1 голос
/ 21 мая 2010

Попробуйте поместить свою dll и файл в каталог bin ASP.Net и сослаться на него оттуда.DLL может молча работать из-за проблем безопасности.

1 голос
/ 21 мая 2010

Немного менее случайное предположение: процесс ASP.NET не имеет разрешения на открытие файла, указанного в "#RAWDATAFILE#"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...