.NET 4.x Как из DLL на Delphi получить значения - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Измучался! Понятно - не ас, хоть в VB.Net не первый день. Но уже двое суток бьюсь и никак! Помогите: Есть dll написанная в Delphi (с частями исходников), пытаюсь из неё получать информацию и получаю вечные - "PInvoke не возвращает Variable" или разнообразие типа того... В общем вызываю функции а результат вечно никак... Вот отрывок кода из Delphi:
Листинг программы
  1. Library NativeDll;
  2. uses
  3. SysUtils,
  4. Windows;
  5. type
  6. PImageSet = ^TImageSet;
  7. TImageSet = packed record
  8. Size : Word;
  9. FileName : Array[0..200] of Char;
  10. end;
  11. MsgSet = ^TMsgSet;
  12. TMsgSet = packed record
  13. Size : Word;
  14. Msg : Array[0..200] of Char;
  15. end;
  16. function GetImage( Card: DWORD; Info: PImageSet ): Integer; stdcall; export;
  17. begin
  18. Result := 1;
  19. if Card = 5 then begin
  20. Result := 0;
  21. Info^.FileName := 'BOOBLE.BMP';
  22. end;
  23. end;
  24. function GetMessage( Card: DWORD; Info: MsgSet ): Integer; stdcall; export;
  25. begin
  26. Result := 1;
  27. if Card in [1..100] then begin
  28. Result := 0;
  29. Info^.Msg := 'Привет Васек!';
  30. end;
  31. end;
  32. exports
  33. GetMessage,
  34. GetImage;
  35. begin
  36. end.
Вызываю примерно так:
Листинг программы
  1. Imports System
  2. Imports System.Text
  3. Imports System.Runtime.InteropServices
  4. Public Class NativeDelphi
  5. Public Structure PImageSet
  6. Dim Size As Int16
  7. Dim FFile() As Char ' пробовал всякое
  8. End Structure
  9. Public Structure MsgSet
  10. Dim Size As Int16
  11. Dim Foto() As Char ' пробовал всякое
  12. End Structure
  13. <DllImport("NativeDll.dll", EntryPoint:="GetImage", _
  14. CallingConvention:=CallingConvention.StdCall)> _
  15. Public Shared Function GetImage(ByRef Results As PImageSet) As Integer
  16. End Function
  17. ' и пробовал так
  18. <DllImport("NativeDll.dll", EntryPoint:="GetMessage", CharSet:=CharSet.Auto)> _
  19. Public Shared Function GetMessage(<MarshalAs(UnmanagedType.LPStr)> ByRef Result As MsgSet)
  20. End Function
  21. End Class
Ошибки да и только. Уж вынес весь мозг. Перепробовал всякое. В инете толковых преобразований Delphi->VB.NET (особенно по поводу packed record и его понимания в VB.NEt, а задом чую - что собака там залежалась) не видать. В общем если не решу - сопьюсь братцы... (и так литров 15 пива выпил в поиске да кучу сайтов (по сиг с каждого) покурил) Пожалейте здоровие мое! PS: На счет маршалить - тут я честно говоря лох. Мож чего не так понимаю. Ясно одно - данные из дельфей приходят пакетом вполне упорядоченной структуры и размером, а как его жевать в VB.NET мне пока непонятно. И есть еще один, для меня пока совсем непонятный тип - PChar (да не, про него я начитался вдоволь, просто непонятно - как его правильно принять из DLL Дельфей в VB.NET, учитывая, что он упакованный) В общем плиз HELP! Заранее ПАСИБО!

Решение задачи: «.NET 4.x Как из DLL на Delphi получить значения»

textual
Листинг программы
  1. <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)> _

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы