Что за предупреждение

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

vIRisium :)
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 24.09.2006 (Вс) 8:49
Откуда: От туда

Что за предупреждение

Сообщение vIRisium :) » 02.01.2007 (Вт) 18:12

Когда я пытаюсь вызвать API функцию появляется вот такое добро
PInvokeStackImbalance was detected
Message: A call to PInvoke function 'CopyMemorySampleVB!CopyMemorySampleVB.WINAPI::CopyMemory' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Как бы его отключить.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.01.2007 (Вт) 18:48

Заметьте, не "как исправить мою кривую программу, написанную кривыми ручками с нарушениями всех правил", а "как отключить предупреждение"...
А тебе в тексте этого предупреждения прямо написали, что надо сделать.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Re: Что за предупреждение

Сообщение gaidar » 02.01.2007 (Вт) 23:46

vIRisium \":)\" писал(а):Когда я пытаюсь вызвать API функцию появляется вот такое добро
[...]


Неверная сигнатура метода (т.е. не правильная декларация в VB.NET программе). Отключить просто - исправить эту досадную ошибку :)
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

vIRisium :)
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 24.09.2006 (Вс) 8:49
Откуда: От туда

Сообщение vIRisium :) » 03.01.2007 (Ср) 11:15

Но как отключить?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.01.2007 (Ср) 11:43

В цитаты однако пора... :)

Не ОТКЛЮЧИТЬ тебе надо, а поправить объявление функции...

А чтобы наставить тебя на путь истинный, покажи как ты ее объявляешь и как тыее пользуешь.
Весь мир матрица, а мы в нем потоки байтов!

vIRisium :)
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 24.09.2006 (Вс) 8:49
Откуда: От туда

Сообщение vIRisium :) » 05.01.2007 (Пт) 8:55

Public Class Form1
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MessageBox(Me.Handle.ToInt32, "TEST", "TEST", 1)
End Sub
End Class

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.01.2007 (Пт) 9:15

Однака тяжелый случай...

Не совсем понятен смысл юзанья API MessageBox при наличии минимум двух способов реализации вывода окна сообщений непосредственно в языке.

А чтоб ушла ошибка стоит вспомнить размеры типа Long в VB6 и в VB.NET и все станет ясно...

З.Ы. ежели не понял то поменяй Long на Integer
Весь мир матрица, а мы в нем потоки байтов!

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 24.05.2007 (Чт) 20:41

А мне тут можно задать вопрос или всё равно в поиск или ещё куда пошлют?

У меня вот такая бня выскочила:

Вызов функции PInvoke "Microsoft.ReportViewer.Common!Microsoft.ReportingServices.Rendering.ImageRenderer.CompositionPDF+WindowsGDIWrapper::GetGlyphIndicesW" разбалансировал стек. Вероятно, это вызвано тем, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke совпадают с неуправляемой целевой подписью.


и мне самому не разобраться :(

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 24.05.2007 (Чт) 20:52

Все тоже самое, только на русском.
Неправильно обьвляешь функцию
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 24.05.2007 (Чт) 21:40

Nord777 писал(а):Все тоже самое, только на русском.
Неправильно обьвляешь функцию
Да я вообще ничего нигде не объявляю :)

Итак код:
Код: Выделить всё

   Implements IDisposable
............
   Private m_currentPageIndex As Integer
   Private m_streams As IList(Of Stream)
..................................

   Private Sub Run()
      Dim report As LocalReport = New LocalReport()
      report.ReportPath = "..\..\Report.rdlc"
      report.DataSources.Add(New ReportDataSource("Sales", LoadSalesData()))

      ExportPDF(report)

      m_currentPageIndex = 0
      Print()
   End Sub

..............

   Private Sub Print()
      'Const printerName As String = "Laser"
      'Const printerName As String = "Microsoft Office Document Image Writer"

      If m_streams Is Nothing Or m_streams.Count = 0 Then
         Return
      End If

      Dim printDoc As New PrintDocument()
      AddHandler printDoc.PrintPage, AddressOf PrintPage
      printDoc.Print()
   End Sub

....................

   Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)

      Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
      ev.Graphics.DrawImage(pageImage, ev.PageBounds)

      m_currentPageIndex += 1
      ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
   End Sub
.......................

   Private Sub ExportPDF(ByVal report As LocalReport)
      Dim deviceInfo As String = "<DeviceInfo>" + _
       "  <OutputFormat>PDF</OutputFormat>" + _
       "  <DpiX>300</DpiX>" + _
       "  <DpiY>300</DpiY>" + _
       "  <PageWidth>21cm</PageWidth>" + _
       "  <PageHeight>29.7cm</PageHeight>" + _
       "  <MarginTop>2cm</MarginTop>" + _
       "  <MarginLeft>2cm</MarginLeft>" + _
       "  <MarginRight>2cm</MarginRight>" + _
       "  <MarginBottom>2cm</MarginBottom>" + _
       "</DeviceInfo>"
      Dim warnings() As Warning = Nothing
      m_streams = New List(Of Stream)()

      report.Render("PDF", deviceInfo, AddressOf CreateStream, warnings)

      Dim stream As Stream
      For Each stream In m_streams
         stream.Position = 0
      Next
   End Sub
..............................
   Private Function CreateStream(ByVal name As String, _
     ByVal fileNameExtension As String, _
     ByVal encoding As Encoding, _
     ByVal mimeType As String, _
     ByVal willSeek As Boolean) As Stream

      Dim stream As Stream = New FileStream("..\.." + name + "." + fileNameExtension, FileMode.Create)
      m_streams.Add(stream)
      Return stream

   End Function


Ошибка выскакивает на строке
Код: Выделить всё
      report.Render("PDF", deviceInfo, AddressOf CreateStream, warnings)


Это всё как бы отсюда: http://forums.microsoft.com/MSDN/ShowPo ... 7&SiteId=1

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 24.05.2007 (Чт) 23:58

И это тоже оттуда:
I tried sample in beta2, it didn't compile because function doesn't match delegate. Only added last parameter as below..

private Stream CreateStream( string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek, Microsoft.ReportingServices.Interfaces.StreamOper oper )

It's working fine.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 25.05.2007 (Пт) 13:21

Nord777 писал(а):И это тоже оттуда:
I tried sample in beta2, it didn't compile because function doesn't match delegate. Only added last parameter as below..

private Stream CreateStream( string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek, Microsoft.ReportingServices.Interfaces.StreamOper oper )

It's working fine.
Итс нот воркинг. Хотя и оттуда.

Ладно, я понял. Круто всё, но все занятые тут.

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 02.06.2007 (Сб) 15:44

Nord777 писал(а):Все тоже самое, только на русском. Неправильно обьвляешь функцию
Дело, разумеется, совсем не в объявлении функции оказалось: https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=165298
Последний раз редактировалось asharky 02.06.2007 (Сб) 22:25, всего редактировалось 1 раз.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 02.06.2007 (Сб) 17:30

Feedback
Reporting services: PInvokeStackImbalance when exporting report to PDF with chinese chars


И что? Ты использовал китайские символы?? :shock:
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 02.06.2007 (Сб) 19:52

Nord777 писал(а):И что? Ты использовал китайские символы?? :shock:
Нет.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 02.06.2007 (Сб) 21:38

Ну так там сказано что проблема возникает с китайскими символами. При чем тут твой код? Ты решил проблему?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 02.06.2007 (Сб) 22:04

Nord777 писал(а):Ну так там сказано что проблема возникает с китайскими символами. При чем тут твой код?
Кириллица.
Nord777 писал(а):Ты решил проблему?
Решил.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.06.2007 (Вс) 11:34

Было бы правильным, если бы ты написал способ решения своей проблемы. Другие участники форума тоже могут нарваться на эти же грабли.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 03.06.2007 (Вс) 12:23

Nord777 писал(а):Было бы правильным, если бы ты написал способ решения своей проблемы. Другие участники форума тоже могут нарваться на эти же грабли.
Да что ты говоришь? :shock: Какие правильные слова! А мне почему-то показалось, что на этом форуме принято только мордой в поиск по MSDN тыкать :)

По сути (выше был наезд):

Проблема с рендерингом в PDF документов, использующих всякую кириллицу, литвинницу, китайщину и проч. негроидные символы, есть. Возникает она только в отладочном режиме (по F5). Больше всего по данной проблеме сказано вот тут: http://forums.microsoft.com/MSDN/ShowPo ... 2&SiteID=1 Там сперва ля-ля-ля, много-много, а потом пришел лесник (Donovan Smith - MS), из Майкрософта, и сказал буквально следующее:
We are aware of this issue. I have not been able to identify any errors in the generated PDF caused by this mismatch when using retail bits. Given the only manifestation of this issue is the exception that only appears in debug mode we chose not to fix it until we can do a thorough review of the code in this area. We plan for this review to be part of our next major release.


И значит: ждём следующего релиза в котором проблему пофиксят.

Слова Donovan Smith - MS я конечно проверил: скомпилил, инсталлировал программу, запустил. Всё работает, стэк не разбалансируется. Не соврал значит.

Что я сделал... В моем частном случае не критично в каком формате сбрасывать документ на диск. Гланое чтобы его потом могли прочитать. Ну я и буду его сбрасывать в простом графическом формате (TIFF или JPEG без сжатия) с resolution 300dpi, чтобы его можно было потом распечатать с приемлемым качеством. А в PDF - не буду (отложим до лучших времён).

Что можно сделать в более "общем" случае до момента устранения бага? (я не делал - мне некогда и не за чем). Ну наверное можно собрать всё, относящееся в рендерингу документа воедино, и скомпилить в виде библиотеки, которую подключить к "главному" проекту. Тогда на этапе отладки проекта всякая бня не будет выскакивать.

Но - не уверен. Я .net и VB пока слабо понимаю (или они меня), поэтому могу и ошибаться, в т.ч. и глобально. Не судите строго - я только начинаю свой путь в программирование на современных языках. Ещё перфокарты ведь не выбросил! И вообще: я не программист - я водолаз. Делайте поправку. Терпимее надо быть к людям. Потонете - мне доставать :)

На всякий случай, для других водолазов, привожу валидный код:

Код: Выделить всё
Imports System
Imports System.IO
Imports System.Data
Imports System.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports System.Collections.Generic
Imports Microsoft.VisualBasic
Imports Microsoft.Reporting.WinForms

Public Class Check
   Implements IDisposable

   Private m_currentPageIndex As Integer
   Private m_streams As IList(Of Stream)

   ''' <summary>Чтение данных из файла *.xml</summary>
   Private Function LoadSalesData() As DataTable
      Dim dataSet As New DataSet()
      dataSet.ReadXml("..\..\data.xml")
      Return dataSet.Tables(0)
   End Function

   Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, _
     ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream

      'Dim streamF As MemoryStream = New MemoryStream()
      Dim streamF As Stream = New FileStream("..\.." + name + "." + fileNameExtension, FileMode.Create)
      m_streams.Add(streamF)                     ' Добавление потока в массив
      Return streamF

   End Function

   ''' <summary>Формирование потока графики</summary>
   ''' <remarks>Графический Формат файла</remarks>
   Private Sub ExportImage(ByVal report As LocalReport, ByVal _str As String)
      Dim deviceInfo As String = "<DeviceInfo>" + _
       "  <OutputFormat>" + _str + "</OutputFormat>" + _
       "  <DpiX>300</DpiX>" + _
       "  <DpiY>300</DpiY>" + _
       "  <Compress>100</Compress>" + _
       "  <PageWidth>21cm</PageWidth>" + _
       "  <PageHeight>29.7cm</PageHeight>" + _
       "  <MarginTop>2cm</MarginTop>" + _
       "  <MarginLeft>2cm</MarginLeft>" + _
       "  <MarginRight>2cm</MarginRight>" + _
       "  <MarginBottom>2cm</MarginBottom>" + _
       "  </DeviceInfo>"
      Dim warnings() As Warning = Nothing
      m_streams = New List(Of Stream)()

      report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)

      Dim stream As Stream
      For Each stream In m_streams
         stream.Position = 0
      Next
   End Sub

   ''' <summary>Формирование потока PDF</summary>
   ''' <remarks>Формат файла PDF vers.1.3</remarks>
   'Private Sub ExportPDF(ByVal report As LocalReport)
   '   Dim deviceInfo As String = "<DeviceInfo>" + _
   '    "  <OutputFormat>PDF</OutputFormat>" + _
   '    "  <DpiX>300</DpiX>" + _
   '    "  <DpiY>300</DpiY>" + _
   '    "  <PageWidth>21cm</PageWidth>" + _
   '    "  <PageHeight>29.7cm</PageHeight>" + _
   '    "  <MarginTop>2cm</MarginTop>" + _
   '    "  <MarginLeft>2cm</MarginLeft>" + _
   '    "  <MarginRight>2cm</MarginRight>" + _
   '    "  <MarginBottom>2cm</MarginBottom>" + _
   '    "</DeviceInfo>"
   '   Dim warnings() As Warning = Nothing
   '   m_streams = New List(Of Stream)()

   '   report.Render("PDF", deviceInfo, AddressOf CreateStream, warnings)

   '   Dim stream As Stream
   '   For Each stream In m_streams
   '      stream.Position = 0
   '   Next
   'End Sub

   ''' <summary>Процедура вызывается по событию "Печать страницы"</summary>
   Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
      Dim pageImage As Drawing.Image = Nothing
      Try
         pageImage = New Metafile(m_streams(m_currentPageIndex))
      Catch ex As Exception
         pageImage = New Drawing.Bitmap(m_streams(m_currentPageIndex))
      End Try

      ev.Graphics.DrawImage(pageImage, ev.PageBounds)

      m_currentPageIndex += 1
      ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
   End Sub

   ''' <summary>Процедура печати</summary>
   Private Sub Print()
      Const printerName As String = "Microsoft Office Document Image Writer"

      If m_streams Is Nothing Or m_streams.Count = 0 Then
         Return
      End If

      Dim printDoc As New PrintDocument()
      printDoc.PrinterSettings.PrinterName = printerName
      If Not printDoc.PrinterSettings.IsValid Then
         Dim msg As String = String.Format("Can't find printer ""{0}"".", printerName)
         MsgBox(msg)
         Return
      End If
      AddHandler printDoc.PrintPage, AddressOf Me.PrintPage
      printDoc.Print()
   End Sub

   ''' <summary>Процедура запуска приложения</summary>
   Sub Run()
      Dim report As LocalReport = New LocalReport()
      report.ReportPath = "..\..\Report.rdlc"
      report.DataSources.Add(New ReportDataSource("Sales", LoadSalesData()))

      ExportImage(report, "TIFF")
      'ExportPDF(report)

      m_currentPageIndex = 0
      Print()
   End Sub

   ''' <summary>Процедура уничтожения объектов по окончанию работы программы</summary>
   Public Overloads Sub Dispose() Implements IDisposable.Dispose
      If Not (m_streams Is Nothing) Then
         Dim stream As Stream
         For Each stream In m_streams
            stream.Close()
         Next
         m_streams = Nothing
      End If
   End Sub

   ''' <summary>Стартовая процедура</summary>
   Public Shared Sub Main(ByVal args As String())
      Using CheckDemo As Check = New Check()
         CheckDemo.Run()
      End Using
   End Sub

End Class

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.06.2007 (Вс) 14:44

Да что ты говоришь? Какие правильные слова! А мне почему-то показалось, что на этом форуме принято только мордой в поиск по MSDN тыкать

Бурная у тебя реакция )). Ты действительно считаешь что участники форума ДОЛЖНЫ искать за тебя способы решения ТВОЕЙ проблемы?
Ты же ведь даже не удосужился привести код в нормальный вид, чтобы его можно было вставить в проект простым Copy-Paste. Но зато ты обижаешься на тех, кто отправляет тебя в поиск. Будь попроще. Если тебе не ответили - ну значит либо не сталкивались с этой проблемой, либо знющие об этой проблеме люди просто не заходили на форум.
Писал ты всё это не для тех кто посылает тебя в поиск(они сами всё прекрасно найдут когда это им понадобится), а для таких же как и ты - начинающих осваивать программирование/VB.Net.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62

    TopList