.NET 4.x Как из DLL на Delphi получить значения - Visual Basic .NET
Формулировка задачи:
Измучался! Понятно - не ас, хоть в VB.Net не первый день. Но уже двое суток бьюсь и никак!
Помогите:
Есть dll написанная в Delphi (с частями исходников), пытаюсь из неё получать информацию и получаю вечные - "PInvoke не возвращает Variable" или разнообразие типа того...
В общем вызываю функции а результат вечно никак...
Вот отрывок кода из Delphi:
Вызываю примерно так:
Ошибки да и только. Уж вынес весь мозг. Перепробовал всякое. В инете толковых преобразований Delphi->VB.NET (особенно по поводу packed record и его понимания в VB.NEt, а задом чую - что собака там залежалась) не видать.
В общем если не решу - сопьюсь братцы... (и так литров 15 пива выпил в поиске да кучу сайтов (по сиг с каждого) покурил) Пожалейте здоровие мое!
PS: На счет маршалить - тут я честно говоря лох. Мож чего не так понимаю. Ясно одно - данные из дельфей приходят пакетом вполне упорядоченной структуры и размером, а как его жевать в VB.NET мне пока непонятно.
И есть еще один, для меня пока совсем непонятный тип - PChar (да не, про него я начитался вдоволь, просто непонятно - как его правильно принять из DLL Дельфей в VB.NET, учитывая, что он упакованный) В общем плиз HELP! Заранее ПАСИБО!
Листинг программы
- Library NativeDll;
- uses
- SysUtils,
- Windows;
- type
- PImageSet = ^TImageSet;
- TImageSet = packed record
- Size : Word;
- FileName : Array[0..200] of Char;
- end;
- MsgSet = ^TMsgSet;
- TMsgSet = packed record
- Size : Word;
- Msg : Array[0..200] of Char;
- end;
- function GetImage( Card: DWORD; Info: PImageSet ): Integer; stdcall; export;
- begin
- Result := 1;
- if Card = 5 then begin
- Result := 0;
- Info^.FileName := 'BOOBLE.BMP';
- end;
- end;
- function GetMessage( Card: DWORD; Info: MsgSet ): Integer; stdcall; export;
- begin
- Result := 1;
- if Card in [1..100] then begin
- Result := 0;
- Info^.Msg := 'Привет Васек!';
- end;
- end;
- exports
- GetMessage,
- GetImage;
- begin
- end.
Листинг программы
- Imports System
- Imports System.Text
- Imports System.Runtime.InteropServices
- Public Class NativeDelphi
- Public Structure PImageSet
- Dim Size As Int16
- Dim FFile() As Char ' пробовал всякое
- End Structure
- Public Structure MsgSet
- Dim Size As Int16
- Dim Foto() As Char ' пробовал всякое
- End Structure
- <DllImport("NativeDll.dll", EntryPoint:="GetImage", _
- CallingConvention:=CallingConvention.StdCall)> _
- Public Shared Function GetImage(ByRef Results As PImageSet) As Integer
- End Function
- ' и пробовал так
- <DllImport("NativeDll.dll", EntryPoint:="GetMessage", CharSet:=CharSet.Auto)> _
- Public Shared Function GetMessage(<MarshalAs(UnmanagedType.LPStr)> ByRef Result As MsgSet)
- End Function
- End Class
Решение задачи: «.NET 4.x Как из DLL на Delphi получить значения»
textual
Листинг программы
- <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)> _
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д