Помогите перевести Dll c Delphi

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Помогите перевести Dll c Delphi

Сообщение SHURUP » 06.03.2005 (Вс) 23:49

Надеюсь на помощь полиглотов :cry:
Есть файл-исходник плагина для чата. Плагин выполнен в виде Dll (на делфи) А я хочу писать плагины на другом языке програмирования (сами знаете на каком :twisted: :wink: ) Думаю, что ничего сложного там нет. Но я в этом деле - слабенький (Прикладую вместе с исходником и описание выдернутое из справки по данному вопросу)
-------------------
Если кто-то может помочь - буду ОООчень благодарен!
Спасибо большое заранее!
Очень надеюсь на вашу помощь!
Будете у нас в Ирпене - выставлю пиво!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 06.03.2005 (Вс) 23:52

Ой! А как добавить? Тут вроди бі кнопочка "добавить приложение" была!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.03.2005 (Вс) 23:56

SHURUP писал(а):Ой! А как добавить? Тут вроди бі кнопочка "добавить приложение" была!

Съели злые хакеры, вместе со всеми приложениями, что уже были закачаны :-((
Изображение

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 07.03.2005 (Пн) 0:14

Ладно, по причинческим технинам… :
Код: Выделить всё
library Demo;

Uses Windows, SysUtils;

Procedure GetTitle(Buffer: PChar); stdcall;
Begin
  // Return plugin title
  StrPCopy(Buffer, 'Demonstration');
End;

Procedure GetDescription(Buffer: PChar); stdcall;
Begin
  // Return plugin description
  StrPCopy(Buffer, 'This is demonstration plugin.'+#$D#$A+'It sent ''Passed'' on ''Ping'' message.');
End;

Procedure Configure(HWND: THandle); stdcall;
Begin
  MessageBox(
     HWND,
     'This is demonstration plugin.'+#$D#$A+
     'It doesn''t required any settings.'+#$D#$A+
     'See ''FChat\Plugins\Demo\Demo.dpr'' to learn how to develop plugins.',
     'Configure',
     MB_OK or MB_ICONINFORMATION);
End;

Procedure OnMessage(
    sChatRoomName: PChar;        // Chatroom name
    sMessage: PChar;             // Message text
    sNickName: PChar;            // Chatter nickname
    sAddress: PChar); stdcall;    // Chatter address
Begin
// On public message
End;

Procedure OnMyMessage(
    sChatRoomName: PChar;
    sMessage: PChar); stdcall;
Begin
// On my public message
End;

Procedure OnPersonalMessage(
    sChatRoomName: PChar;        // Chatroom name
    sMessage: PChar;             // Message text
    sNickName: PChar;            // Chatter nickname
    sAddress: PChar;             // Chatter address
    sReply: PChar); stdcall;     // Text for reply (default - empty - no reply)
Begin
  // On personal message

  If (LowerCase(sMessage)='ping') then
    StrPCopy(sReply, 'Passed');
End;

Procedure OnMyPersonalMessage(
    sChatRoomName: PChar;        // Chatroom name
    sMessage: PChar;             // Message text
    sNickName: PChar;            // Chatter nickname
    sAddress: PChar); stdcall;   // Chatter address
Begin
// On my personal message
End;

Procedure OnConnected(
    sChatRoomName: PChar;        // Chatroom name
    sNickName: PChar;            // Chatter nickname
    sAddress: PChar); stdcall;   // Chatter address
Begin
// Chatter connected
End;

Procedure OnDisconnected(
    sChatRoomName: PChar;        // Chatroom name
    sNickName: PChar;            // Chatter nickname
    sAddress: PChar); stdcall;   // Chatter address
Begin
// Chatter disconnected
End;

exports
  GetTitle,
  GetDescription,
  Configure,
  OnMessage,
  OnMyMessage,
  OnPersonalMessage,
  OnMyPersonalMessage,
  OnConnected,
  OnDisconnected;

begin
// Initialization part
end.
Вот он тот злобный проэкт!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 07.03.2005 (Пн) 1:34

Съели злые хакеры, вместе со всеми приложениями, что уже были закачаны

Это уже не смешно, это у всех так или уменя одного?

А насчет кода вроде бы так!?
Код: Выделить всё
Public Const MB_OK = &H0&
Public Const MB_ICONASTERISK = &H40&
Public Const MB_ICONINFORMATION = MB_ICONASTERISK
Public 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

Sub GetTitle(ByRef buffer As String)
buffer = "Demonstration"
End Sub

Sub GetDescription(ByRef buffer As String)
'Насчет "#$D#$A" неуверен
buffer = "This is demonstration plugin." & vbCrLf & "It sent ""Passed"" on ""Ping"" message.'"
End Sub

Sub Configure(hwnd As Long)
  Call MessageBox( _
     hwnd, _
     "This is demonstration plugin." & vbCrLf & _
     "It doesn't required any settings." & vbCrLf & _
     "See ""FChat\Plugins\Demo\Demo.dpr"" to learn how to develop plugins.", _
     "Configure", _
     MB_OK Or MB_ICONINFORMATION)
End Sub

Sub OnMessage( _
    ByRef sChatRoomName As String, _
    ByRef sMessage As String, _
    ByRef sNickName As String, _
    ByRef sAddress As String)
'    sChatRoomName - Chatroom name
'    sMessage - Message text
'    sNickName - Chatter nickname
'    sAddress - Chatter address

' On public message
End Sub


Sub OnMyMessage( _
    ByRef sChatRoomName As String, _
    ByRef sMessage As String)
' On my public message
End Sub

Sub OnPersonalMessage( _
    ByRef sChatRoomName As String, _
    ByRef sMessage As String, _
    ByRef sNickName As String, _
    ByRef sAddress As String, _
    ByRef sReply As String)

'    sChatRoomName - Chatroom name
'    sMessage - Message text
'    sNickName - Chatter nickname
'    sAddress - Chatter address
'    sReply - Text for reply (default - empty - no reply)


'   On personal message

If (LCase(sMessage) = "ping") Then sReply = "Passed"
End Sub

Sub OnMyPersonalMessage( _
    ByRef sChatRoomName As String, _
    ByRef sMessage As String, _
    ByRef sNickName As String, _
    ByRef sAddress As String)

'    sChatRoomName - Chatroom name
'    sMessage - Message text
'    sNickName - Chatter nickname
'    sAddress - Chatter address


'On my personal message
End Sub

Sub OnConnected( _
    ByRef sChatRoomName As String, _
    ByRef sNickName As String, _
    ByRef sAddress As String)

'    sChatRoomName - Chatroom name
'    sNickName - Chatter nickname
'    sAddress - Chatter address

'Chatter connected
End Sub

Sub OnDisconnected( _
    ByRef sChatRoomName As String, _
    ByRef sNickName As String, _
    ByRef sAddress As String)

'    sChatRoomName - Chatroom name
'    sNickName - Chatter nickname
'    sAddress - Chatter address

'Chatter disconnected
End Sub

'exports
'  GetTitle,
'  GetDescription,
'  Configure,
'  OnMessage,
'  OnMyMessage,
'  OnPersonalMessage,
'  OnMyPersonalMessage,
'  OnConnected,
'  OnDisconnected;
'
Sub main()
' Initialization part
End Sub


ЗЫ
Перевод с делфей - дело правое, делфи язык леньтяев

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 07.03.2005 (Пн) 2:47

Serega.I, спасибо за попытку помочь…
но…
Слишком позно я заметил, что созданая ДЛЛ-ка должна быть вовсе не activeX, а такая, чтоб ее можно было через Declare объявлять(Native, вроде бы). А как делать эти самые Native - я не знаю! По форуму искал - нашел! Много думал! Ничего не понял! Где этот ЛИНК.ЕХЕ скачать можно?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2005 (Пн) 3:14

SHURUP, если нет спецлинкера - то есть способ лучше: задай в Свойствах Системы - Дополнительно - Переменные среды переменную "LINK" со значением "/FIXED:NO", тогда и обычный линкер подойдёт.
Изображение

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 07.03.2005 (Пн) 3:35

Создал! Никаких изменений.
tyomitch, Можешь мне, ламеру, разжевать, что за чем делать при компиляции? (и перед ней)
Я, кстати не совсем понял - таким методом собранная ДЛЛ-ка будет работать с готовым ЕХЕ-шником (как плагин)? Или этот изощеренный метод работает только для собственных программ?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

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

Сообщение GSerg » 07.03.2005 (Пн) 11:00

Исходник псевдолинкера выглядит следующим образом...

Код: Выделить всё
Option Explicit

Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpAppName As String, ByVal lpCmdLine As String, lpProcAttr As Any, lpThreadAttr As Any, ByVal lpInheritedHandle As Long, ByVal lpCreationFlags As Long, ByVal lpEnv As Long, ByVal lpCurDir As String, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const INFINITE As Long = &HFFFFFFFF

Private Type STARTUPINFO
  cb As Long
  lpReserved As String
  lpDesktop As String
  lpTitle As String
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Integer
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type

Private Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessID As Long
  dwThreadID As Long
End Type

Sub Main()
  Dim si As STARTUPINFO, pi As PROCESS_INFORMATION
 
  si.cb = Len(si)
  si.dwFlags = 1
 
  CreateProcess vbNullString, "link_old.exe " & Command$ & " /FIXED:NO", ByVal 0&, ByVal 0&, 1, 0, 0, vbNullString, si, pi
  WaitForSingleObject pi.hProcess, INFINITE
  CloseHandle pi.hProcess
  CloseHandle pi.hThread
  End
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 07.03.2005 (Пн) 15:08

Всем Спасибо! Буду пробовать!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


Вернуться в Visual Basic 1–6

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

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

    TopList  
cron