Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/32: Рейтинг темы: голосов - 32, средняя оценка - 4.72
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
.NET 4.x

Как из DLL на Delphi получить значения

15.06.2013, 01:20. Показов 7137. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Измучался! Понятно - не ас, хоть в VB.Net не первый день. Но уже двое суток бьюсь и никак!
Помогите:
Есть dll написанная в Delphi (с частями исходников), пытаюсь из неё получать информацию и получаю вечные - "PInvoke не возвращает Variable" или разнообразие типа того...
В общем вызываю функции а результат вечно никак...

Вот отрывок кода из Delphi:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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.
Вызываю примерно так:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
Ошибки да и только. Уж вынес весь мозг. Перепробовал всякое. В инете толковых преобразований Delphi->VB.NET (особенно по поводу packed record и его понимания в VB.NEt, а задом чую - что собака там залежалась) не видать.
В общем если не решу - сопьюсь братцы... (и так литров 15 пива выпил в поиске да кучу сайтов (по сиг с каждого) покурил) Пожалейте здоровие мое!

PS: На счет маршалить - тут я честно говоря лох. Мож чего не так понимаю. Ясно одно - данные из дельфей приходят пакетом вполне упорядоченной структуры и размером, а как его жевать в VB.NET мне пока непонятно.
И есть еще один, для меня пока совсем непонятный тип - PChar (да не, про него я начитался вдоволь, просто непонятно - как его правильно принять из DLL Дельфей в VB.NET, учитывая, что он упакованный) В общем плиз HELP! Заранее ПАСИБО!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2013, 01:20
Ответы с готовыми решениями:

Получить данные через указатель из dll на delphi
Здравствуйте, помогите пожалуйста! имеется dll, написанная на delphi, где есть процедура: procedure GGetCell(Col : integer; Row :...

Как подключить dll, написанную на C, к dll на Delphi
Добрый день! Нужно подключить dll написанную на C к dll на Delphi. Как это можно сделать и можно ли вообще?

Есть исходник DLL на Delphi как (и возможно ли) написать похожее на VB.NET и использовать в среде программы написанной на Delphi
Суть вопроса вкратце такова - Есть исходник DLL написанной на Delphi Library Extdll; uses SysUtils, Windows; type ...

50
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
25.06.2013, 21:09
Студворк — интернет-сервис помощи студентам
p_SetAccountInfo(ByRef Info As TAccountInfo) попробуйте так.
2
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
25.06.2013, 21:41  [ТС]
Ну я поражен... Простая проверка - вроде как пошло. Но вот ведь только недавно пробовал менять ByVal на ByRef и не очень работало... Я еще перепроверю по изменениям остальных элементов структуры!

Но пошло ведь!!!
Ну прям китайская грамота - как хотишь так понимай. То работает, а то (если не работает) и снизу вверх читай!
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
25.06.2013, 21:50
Т.к. TAccountInfo это структура, то передавать её по значению с const параметром просто неразумно, поэтому остается только один вариант: передается ссылка на объект, но изменить объект с использованием этой ссылки функция SetAccountInfo не сможет (это должен контролировать компилятор Delphi или какой-то сервис на более ранних стадиях, хз какие у него там анализаторы кода и т.п. используются). Как-то так, других мыслей у меня нет...
2
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
26.06.2013, 18:43  [ТС]
Ну млиин... Проверил еще пару передаваемых значений - ВСЕ РАБОТАЕТ!
Даже не знаю - как же так получалось ранее, что не работало!
То ли форум хорош, то ли NickoTin так благотворительно воздействует!!!
ОДНАКО ОБЕЩАЮ ОДНО - ВОПРОСОВ ЕЩЕ ОЧ МНОГО!

Добавлено через 1 час 14 минут
Ну и хорошо, что про "компилятор делфи" все молчат - суть вопроса РАЗОБРАТЬСЯ

Добавлено через 2 минуты
СПБо очередной раз!

Добавлено через 19 часов 26 минут
Столкнулся с такими конструкциями и не могу понять - каким образом их реализовать в VB.NET?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
type
  {процедура обратного вызова для записи информации, полученной от сервера}
  TFWrite = Procedure( Data: Pointer; Size: Integer ); stdcall;
 
{получить назначенное на счёт изображение}
Function GetAccountImage( Account: Integer; Proc: TFWrite ): BOOL; stdcall;
 
type
  {процедура обратного вызова для перечисления счетов}
  TEnumAccounts = Procedure( const Info: TAccountInfo ); stdcall;
 
{возврат всех счетов}
Function GetAllAccounts( Proc: TEnumAccounts ): BOOL; stdcall;
Стыдно... Но что то никак...
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.06.2013, 19:47
C#
1
2
3
4
5
6
7
8
9
10
11
    private delegate void FWRiteCallback (
        IntPtr pData, // можно попробовать byte[], но скорее всего не прокатит
        int size );
 
    private delegate void EnumAccountsCallback ( [In] ref TAccountInfo info );
 
    [DllImport( "..." )]
    private static extern bool GetAccountImage ( int account, FWRiteCallback callback );
 
    [DllImport( "..." )]
    private static extern bool GetAllAccounts ( EnumAccountsCallback callback );
Через конвертер:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
' можно попробовать byte[], но скорее всего не прокатит
Private Delegate Sub FWRiteCallback(pData As IntPtr, size As Integer)
 
Private Delegate Sub EnumAccountsCallback(<[In]> ByRef info As TAccountInfo)
 
<DllImport("...")> _
Private Shared Function GetAccountImage(account As Integer, callback As FWRiteCallback) As Boolean
End Function
 
<DllImport("...")> _
Private Shared Function GetAllAccounts(callback As EnumAccountsCallback) As Boolean
End Function
2
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
27.06.2013, 18:06  [ТС]
(Долбаные электрики - второй день как к компьютеру не подступиться)

Как уже говорил - с такой конструкцией даже в VB.NET не сталкивался, не то что в Delphi
В общем код для одной из функций у меня вышел таким:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Возврат всех счетов
    <DllImport(CscLinkLib, CharSet:=CharSet.Ansi, EntryPoint:="GetAllAccounts")> _
    Private Shared Function p_GetAllAccounts(ByVal callback As EnumAccountsCallback) As Boolean
    End Function
 
    ' Процедура обратного вызова для перечисления счетов
    Public Delegate Sub EnumAccountsCallback(<[In]()> ByRef info As TAccountInfo)
 
    ' Вызывалка
    Dim Info As EnumAccountsCallback
            If p_GetAllAccounts(Info) Then
                CscLink.LastMsg = "The request GetAllAccounts is successful"
                Return True
            Else
                CscLink.LastMsg = p_GetErrorText().ToString
                Return False
            End If
Структура типа TAccountInfo вызывается из других функций при чтении/записи и отрабатывает исключительно правильно.
К ней претензий нет. Однако вызов "Вызывалки" возвращает в [COLOR="rgb(65, 105, 225)"]CscLink.LastMsg[/COLOR] ошибку из внешней DLL типа:
"Access violation at address 00000000. Read of address 00000000"

Вобще, как бы понимаю, что скорее всего инициализировать Info следовало бы как Dim Info As New EnumAccountsCallback Если так, то подскажите - как правильно использовать в таком случае AddressOf
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.06.2013, 19:04
Да, про пример забыл, писал на работе...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    void EnumAccounts ( [In] ref TAccountInfo info )
    {
        // Этот метод будет вызван из DLL
    }
 
    void SomeMethodA ( )
    {
        EnumAccountsCallback callback = EnumAccounts;
 
        if ( GetAllAccounts( callback ) )
        {
            // all ok
        }
 
        // Чтобы callback был недосягаем для GC
        GC.KeepAlive( callback );
    }
 
    void FWRite ( IntPtr pData, int size )
    {
        // Этот метод будет вызван из DLL
        // Для работы с pData используйте методы из класса Marshal:
        // Marshal.ReadX или Marshal.Copy
    }
 
    void SomeMethodB ( int account )
    {
        FWRiteCallback callback = FWRite;
 
        if ( GetAccountImage( account, callback ) )
        {
            // all ok
        }
 
        GC.KeepAlive( callback );
    }
Добавлено через 5 минут
Цитата Сообщение от RafStudio Посмотреть сообщение
как правильно использовать в таком случае AddressOf
Если не ошибаюсь, то так:
VB.NET
1
Dim callback As New EnumAccountsCallback(AddressOf EnumAccounts)
0
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
27.06.2013, 19:27  [ТС]
Спасибо за потраченное время!
Несколько замешкался:
Цитата Сообщение от NickoTin Посмотреть сообщение
EnumAccountsCallback callback = EnumAccounts;
Просит, понятное дело, аргумента для Info, а что-то типа:
VB.NET
1
2
Dim KeepAccounts As New TAccountInfo
        Dim callback As EnumAccountsCallback = EnumAccounts(KeepAccounts)
Посылает на "Выражение не порождает значения" (и это понятно - процедура ничего и не возвращает...)
А самое печальное для меня - эт сколько ж я еще не знаю и не понимаю в принципе!!!
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.06.2013, 19:58
Цитата Сообщение от RafStudio Посмотреть сообщение
Посылает на "Выражение не порождает значения" (и это понятно - процедура ничего и не возвращает...)
Функции Delphi требуют чтобы им передали адрес функции, которую они будут вызывать как уведомление о каком-то событии (те же Event'ы, если брать грубо). Вы же пытаетесь вызвать функцию и возвращенный ею результат (которого нет, т.к. Sub) выдать за адрес функции, что в корне неверно, для получения адреса функции в VB.NET нужно использовать AddressOf
Цитата Сообщение от NickoTin Посмотреть сообщение
VB.NET
1
Dim callback As New EnumAccountsCallback(AddressOf EnumAccounts)
1
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
27.06.2013, 20:59  [ТС]
Ну как всегда - Дэвид Блэйн!
Только вот в силу КОНКРЕТНОЙ неопытности в данном вопросе - непонятно откуда извлекать необходимое инфо: там столько всего народилось...!!!
VB.NET
1
2
Dim callback As New EnumAccountsCallback(AddressOf CscLink.EnumAccounts)
            p_GetAllAccounts(callback)
Выдает на гора целую тучу радости... Естественно в callback
В где искать запрошенное?!!

А вот за прояснение с Sub в Delphi => отдельное спасибо. Мне, честно говоря, несколько сложен для понимания данный трюк. Нет, инстинктивно - понимаю, однако выворот вообще из мозга вон. в SQL в этом плане понятно - поочередно забираешь данные после вызова сохраненной процедуры и нет взлома нейронных ячеек...

Добавлено через 11 минут
Цитата Сообщение от NickoTin Посмотреть сообщение
Если не ошибаюсь, то так:
VB.NET
1
Dim callback As New EnumAccountsCallback(AddressOf EnumAccounts)
Извиняюсь - проглядел эту строку...
0
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
27.06.2013, 21:26  [ТС]
Уточню - callback по возвращении содержит следующую красоту:
оттого и не очень понятно - где искать соль... Хоть коротенько и пробежался по верхушкам...
Миниатюры
Как из DLL на Delphi получить значения  
0
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
27.06.2013, 21:39  [ТС]
Как предположение:
создать некий массив из TACcountInfo и в методе

VB.NET
1
2
3
    ' Этот метод будет вызван из CscLink.dll
    Private Shared Sub EnumAccounts(<[In]()> ByRef info As TAccountInfo)
    End Sub
все это в него складывать? (просто именно здесь и видны все необходимые значения в Info...)
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.06.2013, 21:51
@RafStudio, да, именно так.
1
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
28.06.2013, 19:41  [ТС]
Хоть немного уловил суть! Аж самому радуется!
С другой стороны - в коде Delphi все это видится однако весьма лаконичнее. И теперь даже понятнее... Обидно!

Добавлено через 21 час 46 минут
Собрал такую конструкцию:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    <ComVisibleAttribute(True)> _
    Const CscLinkLib = "csclink.dll"
 
    Private Shared m_AccountInfo(0) As TAccountInfo
 
    ' Функция внешней библиотеки - Возврат всех счетов
    <DllImport(CscLinkLib, CharSet:=CharSet.Ansi, EntryPoint:="GetAllAccounts")> _
    Private Shared Function p_GetAllAccounts(ByVal callback As EnumAccountsCallback) As Boolean
    End Function
 
    ' Процедура обратного вызова для перечисления счетов
    Private Delegate Sub EnumAccountsCallback(<[In]()> ByRef info As TAccountInfo)
 
    ' Этот метод будет вызван из CscLinkLib
    Private Shared Sub EnumAccounts(<[In]()> ByRef info As TAccountInfo)
        Dim x As Integer = UBound(m_AccountInfo)
        ReDim Preserve m_AccountInfo(x + 1)
        m_AccountInfo(x) = info
    End Sub
 
    ' === ВОЗВРАТ ВСЕХ СЧЕТОВ ===
    Public Shared Function GetAllAccounts(ByRef AllAccounts As Array) As Boolean
        Try
            ReDim m_AccountInfo(0)
            Dim callback As New EnumAccountsCallback(AddressOf EnumAccounts)
            If p_GetAllAccounts(callback) Then
                CscLink.LastMsg = "The request GetAllAccounts is successful"
                AllAccounts = m_AccountInfo
                Return (True)
            Else
                CscLink.LastMsg = p_GetErrorText().ToString
                Return False
            End If
        Catch ex As Exception
            CscLink.LastMsg = ex.ToString
            Return False
        End Try
    End Function
Все конечно работает, но конкретно не радует присутствие в массиве m_AccountInfo последней пустой записи...
Конечно, можно в конце вновь сделать ReDim на еденицу меньше текущего размера. Но может вообще есть более
элегантный и менее затратный подход, чем постоянно менять размерность массива?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
28.06.2013, 19:45
Цитата Сообщение от RafStudio Посмотреть сообщение
VB.NET
1
2
3
Dim x As Integer = UBound(m_AccountInfo)
ReDim Preserve m_AccountInfo(x + 1)
m_AccountInfo(x) = info
воу-воу, что за пережитки прошлого в виде VB6? Почитайте про списки List<T>.
1
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
28.06.2013, 20:28  [ТС]
А я и говорил, что не АС! Что знал, то и применил!
Хорошо. Попробовал:

VB.NET
1
2
3
4
5
6
    Private Shared m_AccountInfo As List(Of TAccountInfo)
 
    ' Этот метод будет вызван из CscLink.dll
    Private Shared Sub EnumAccounts(<[In]()> ByRef info As TAccountInfo)
        m_AccountInfo.Add(info)
    End Sub
Выкидывает с ошибкой:
Access violation at address 041A9D7F. Read of address 00000000
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
28.06.2013, 20:35
Цитата Сообщение от RafStudio Посмотреть сообщение
info
info корректен? m_AccountInfo инициализирован (C#: m_AccountInfo = new List<TAccountInfo>())?
1
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
29.06.2013, 10:31  [ТС]
Mkz!!! Типичная ошибка мелкого VB-иста!
Ну конечно - инициализировал без NEW!!!

Добавлено через 1 час 0 минут
Правильнее - объявил, но не инициализировал...
Ну это больше так, для себя. А пока пытаюсь все собрать в кучу и привести в порядок описания...

Добавлено через 10 часов 40 минут
Понимаю, что не совсем к теме о DLL Delphi но, чтобы не создавать новую тему для пары высказываний, есть ли простой путь: полученный массив AccountInfo вывести в DataGridWiew или все же придется "традиционно" перебирать элементы массива и добавлять в таблицу?

Добавлено через 1 час 50 минут
Ладно - Бог с ним!
Вроде все делаю правильно, Name возвращается, однако поля типа Id и ParentId возвращаются со значением типа "Невозможно вычислить значение". Сдается - надо маршаллить но что то подступиться не могу...

Delphi
1
2
3
4
5
6
    type
      {процедура обратного вызова для перечисления папок}
      TEnumFolders = Procedure( Id, ParentId: Integer; Deleted: Boolean; Name: PChar ); stdcall;
 
    {возврат всех папок}
    Function GetAllFolders( Proc: TEnumFolders ): BOOL; stdcall;
VB.NET
1
2
3
4
5
6
7
    ' Процедура обратного вызова для перечисления папок (отделов)
    Private Delegate Sub EnumFoldersCallback(<[In]()> ByRef Id As Integer, ByRef ParentId As Integer, ByRef Deleted As Boolean, ByVal Name As String)
    ' Id указывал как Integer поскольку ParentId объявлен как Integer а то, что он ссылается на Id нет сомнений
 
    Private Shared Sub EnumFolders(<[In]()> ByRef Id As Integer, ByRef ParentId As Integer, ByRef Deleted As Boolean, ByVal Name As String)
        ' здесь я занимаюсь обработкой в которой Id и Deleted обозначивают себя как "Невозможно вычислить значение"
    End Sub
Пришла в голову мысль поменять ByRef на ByVal и как всегда чудо - все нормуль. Однако непонятно почему Deleted возвращает True?

Добавлено через 21 минуту
Цитата Сообщение от RafStudio Посмотреть сообщение
' Id указывал как Integer поскольку ParentId объявлен как Integer а то, что он ссылается на Id нет сомнений
- глупость! Перечислены имена через запятую...
Есть живая папка, создал новую папку в сервере, удалил. После вызова функции ответ и на ту и на другую папки (их в итоге всего две) - Deleted = True
Млин... Косяк в DLL что ли... Хочется верить, что в моих мозгах...
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
29.06.2013, 11:09
Цитата Сообщение от RafStudio Посмотреть сообщение
ByRef
Почему ByRef если Вам передается значение, а не ссылка.
По предыдущим опытам, Boolean в Delphi однобайтовый.

C#
1
2
3
4
5
6
    private delegate void EnumFoldersCallback (
        int id,
        int ParentId,
        [MarshalAs( UnmanagedType.I1 )] bool deleted,
        [In, MarshalAs( UnmanagedType.LPStr )] string /* StringBuilder */ name
        );
EnumFolders должен иметь такие-же параметры. Если со "string name" не сработает, попробуйте StringBuilder, но вроде должно.
1
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
01.07.2013, 19:27  [ТС]
Отработал в воскресение, нынче присел за писанину и с радостью:

Цитата Сообщение от NickoTin Посмотреть сообщение
Почему ByRef если Вам передается значение, а не ссылка.
По предыдущим опытам, Boolean в Delphi однобайтовый.

C#
1
2
3
4
5
6
    private delegate void EnumFoldersCallback (
        int id,
        int ParentId,
        [MarshalAs( UnmanagedType.I1 )] bool deleted,
        [In, MarshalAs( UnmanagedType.LPStr )] string /* StringBuilder */ name
        );
EnumFolders должен иметь такие-же параметры. Если со "string name" не сработает, попробуйте StringBuilder, но вроде должно.
Теперь уже внимательнее к приключениям с Delphi в виде ByVal/ByRef (еще раз спасибо)
Со стороны String и StringBuilder - как я понял, тут только методом проверки что вылезет... В данном случае, чтобы не усложнять, достаточно String. Хотя некоторые функции кроме как через StringBuilder - никак.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2013, 19:27

Как средствами RTTI получить указатель на ComponentArray[0] или как получить значения некоторых свойств?
type TTestComponentItem = class(TComponent) end; TComponentArray = array of TTestComponentItem; TTestComponent =...

Как иcследовать DLL написанную на С++, Delphi?
Как иcследовать DLL написанную на С++, Delphi?

Как использовать в Delphi dll из .Net
Всем здравствуйте. Задача: разработать библиотечное приложение (работа с библиотечным сервером и субд oracle). Для работы с...

TableView Получить значения из ячеек в таблице, и присвоить эти значения переменным, а потом получить их сумму
есть код таблицы из примера с оф сайта docs.oracle как можно получить и присвоить переменной цифровое значение введенное в одну из...

Как получить HANDLE server.dll?(GetModuleHandle(L"server.dll") возвращает нули )
Мне необходимо получить HANDLE server.dll для ReadProcessMemory и WriteProcessMemory ,GetModuleHandle(L&quot;server.dll&quot;) возвращает нули...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru