powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
7 сообщений из 7, страница 1 из 1
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372246
Фотография XDefender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?

Частично разобрался, но после выполнения RegFunc
что-то тут неладное происходит, что-то со стеком...
в общем - что-то не то. Может я что-то не так делаю?
Или нужно что-то по другому?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function TDM.RegOCX(Name:String):Boolean;
Var
  OCXHand: THandle;
  RegFunc: TDllRegisterServer;
  T:PChar;
  A:Array of Char;
begin
  Result:=False;
  SetLenGth(A,LenGth(Name)+ 50 );
  T:=SysUtils.StrPCopy(@A,Name);
  OCXHand := Windows.LoadLibrary (T);
  if OCXHand= 0  then Exit;
  RegFunc:= GetProcAddress (OCXHand, 'DllRegisterServer');
  if @RegFunc <> nil then
    begin
     RegFunc;
     Result:=True;
    end;

  Windows.FreeLibrary (OCXHand);
end;
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372291
Rostyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то Вы не слишком точно описали проблему
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372396
Василий Алибабаевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@RegFunc -это указатель на указатель то бишь адрес указателя ...... переменная объявлена -> адрес указателя всегда не равен nil

Бессмысленное сравнение
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372632
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
 @Start:=GetProcAddress(hLib,'Start');
 if @Start<>nil then
  ...


я делаю так...
и проверку не считаю бессмысленной. Для сомневающихся предлагаю почитать хелп по функции GetProcAddress
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372742
Василий Алибабаевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, был не прав, присваивание с GetProcAddress не заметил (однако)
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32372752
Василий Алибабаевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Delphi syntax:

function DllRegisterServer: HResult; stdcall;

C++ syntax:

STDAPI __export DllRegisterServer(void);

Description

Do not call DllRegisterServer directly. DllRegisterServer is exported by in-process ActiveX servers (DLLs) and instructs the DLL to create its registry entries for the type library and all classes supported in that server module. DLLRegisterServer is usually called when the ActiveX server is installed on a user's system.

If this function fails, the state of the registry for its type library and its classes is indeterminate.

The return values for DllRegisterServer are as follows:

Value	Meaning

S_OK	The registry entries were created successfully.
E_FAIL	The registry entries were not completed.

Note:	DllRegisterServer is one of four functions in the ComServ unit that every in-process server must export so that Windows can manage the server resources properly. The others are DllCanUnloadNow, DllGetClassObject, and DllUnregisterServer.


А почему проверки нет чего возвращает RegFunc?

Код: plaintext
1.
S_OK	The registry entries were created successfully.
E_FAIL	The registry entries were not completed.

Может грабли тут?
...
Рейтинг: 0 / 0
Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
    #32373600
Фотография XDefender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грабли тут...

Код: plaintext
1.
2.
3.
4.
5.
6.
  
A:Array of Char;
begin
  Result:=False;
  SetLenGth(A,LenGth(Name)+ 50 );
  T:=SysUtils.StrPCopy(@A,Name);


Конечно, код уже исправил...
Проблема в использовании динамического масива... и притом Delphi сама при закрытии процедуры удаляет выделенный масив.
Поэтому, пришлось с динамического заменить на постоянный.

Код: plaintext
1.
2.
3.
4.
5.
  
A:Array [ 0 .. 5000 ] of Char;
begin
  Result:=False;
  T:=SysUtils.StrPCopy(@A,Name);
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите подправить код. После вызова процедуры из внешней DLL - что-то странное происходит. Может что-то не так?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]