Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2008, 06:30   #1
DeFaber
 
Аватар для DeFaber
 
Регистрация: 09.01.2008
Сообщений: 3
Печаль Перевести с С++ на Delphi

Ребят, я конечно понимаю, что вопрос мой максимально нубский, но эта проблемка мну адолела , я не владею языком С++, но владею Delphi и др.
Суть следующая, мне потребовалось написать плагин к программе ClubControl, чтобы приклеить к ней биллинг на FreeBSD и коечто автоматизировать, но вот с форматом плагина я чтото никак не разберусь, а из примеров есть лиш пример на С++.

Принцип действия плагина:
в папке Plugins размещаются библиотеки с одной экспортируемой функцией : «CallbackProc», которая вызывается клиентом при определенных событиях, например включении выключении интернета.

Параметры :

Код:
void CallbackProc (PLUGIN_CALL_EVENT pce, void *lpData, DWORD dwDataSize); 
pce событие 
lpData дополнительные данные 
dwDataSize размер доп. данных 
enum PLUGIN_CALL_EVENT 
{ 
pceStartup, 
//short 
//computer number 
//sizeof(short) 

pceShutdown, 
//int 
//return value, if != -1 : ExitWindowsEx parameter 
//sizeof(int) 

pceEnableInet, 
//bool 
//true/false 
//sizeof(bool) 

pceMode, 

//int 
//#define MODE_NONE 0 
//#define MODE_LOCKED 1 
//#define MODE_USER 2 
//#define MODE_ADMIN 3 

//#define MODE_LAST MODE_ADMIN 
//#define MODE_TOTAL MODE_NONE 

//#define MODE BYTE 

//sizeof(MODE) 

pceUser 
//char* 
//new user 
//string len + 1 

}
Я попытался сам перевести это на Delphi и вот что вышло:

//=================================== ===================

Код:
library MyPlugin;

uses
  SysUtils, Classes, Dialogs;

{$R *.res}

type
  PLUGIN_CALL_EVENT = (
   pceStartup,
   pceShutdown,
   pceEnableInet,
   pceMode,
   pceUser
);

procedure CallbackProc(pce: PLUGIN_CALL_EVENT; lpData: Pointer; dwDataSize: Integer);
var
  pint: integer;
  pstr: string;
begin
Case PLUGIN_CALL_EVENT(pce) of
   pceStartup:    begin
                    ComputerNum::= SmallInt(lpData^);
                  end;
   pceShutdown:   begin
                    pint:= SmallInt(lpData^);
                  end;
   pceEnableInet: begin
.
.
.
.
   else
                    ShowMessage('Error...');
   end;
end;

exports CallbackProc;

end.
//=================================== ===================
Но вот чтото не совсем работает это, точнее никак не работает программа просто выкидывает ошибку, в lpData почемуто находится число больше похожее на размер данных (2), а в dwDataSize нечто похожее на адрес в памяти (у мну было 174500184) и приэтом при последующем запуске эта цифра меняется, т.е. почемуто lpData и dwDataSize помененны местами, но даже если я их меняю местами, в lpData совсем не та цифра что должна быть, и собстно сама программа почемуто повисает, отрабатывается плагин как надо а потом программа какбудто чегото ждет и грузит проц на 15%.

что делать с дополнительными данными я разберусь и сам , но вот как их получить чтото у мну никак не выходит помогите кто может.

почитать про требования к плагину можно тут:
http://help.clubcontrol.ru/Client/Plugins.htm
Также выкладываю пример плагина написанного на С++.

Заранее всем кто поможет СПС - Что означает большое и человеческое спасибо!!

Модератор: Используйте тег <CODE>
Вложения
Тип файла: rar SimplePlugin.rar (53.6 Кб, 20 просмотров)
Код HTML:
Я пока обычный смертный, мечтающий стать богом.
Поэтому и программирую на смертных языках:
Delphi, VB, Assembler, perl, php, html, 1C

Последний раз редактировалось merax; 12.01.2008 в 09:39.
DeFaber вне форума Ответить с цитированием
Старый 09.01.2008, 18:30   #2
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

В языке C++ по умолчанию используется метод вызова cdecl, а в Delphi - register. Здесь надо описать функцию cdecl:
procedure CallbackProc(pce: PLUGIN_CALL_EVENT; lpData: Pointer; dwDataSize: Integer); cdecl;
n@sok вне форума Ответить с цитированием
Старый 12.01.2008, 06:02   #3
DeFaber
 
Аватар для DeFaber
 
Регистрация: 09.01.2008
Сообщений: 3
По умолчанию

Цитата:
Сообщение от n@sok Посмотреть сообщение
В языке C++ по умолчанию используется метод вызова cdecl, а в Delphi - register. Здесь надо описать функцию cdecl:
procedure CallbackProc(pce: PLUGIN_CALL_EVENT; lpData: Pointer; dwDataSize: Integer); cdecl;
Огромное спасибо, все верно, данные я получил и могу уже с ними работать, но вот программа по прежнему зависает после обработки DLLки, какбудто она чегото ждет, может должна быть ешо какая стандартная для DLL функция которая должна чтото вернуть? (Это моя первая DLLка )
Код HTML:
Я пока обычный смертный, мечтающий стать богом.
Поэтому и программирую на смертных языках:
Delphi, VB, Assembler, perl, php, html, 1C
DeFaber вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно перевести задачу с паскаля на DELPHI VDK23RUS Помощь студентам 8 16.06.2007 15:38