Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Вниз

Вызов функций DLL из компонента.   Найти похожие ветки 

 
EvgenyDr   (2002-11-12 23:10) [0]

Уважаемые коллеги.
У меня есть полностью отлаженная DLL.
Когда я вызываю её функции из обычного приложения то всё работает отлично.
Но когда я использую её в составе компонента: в конструкторе загружаю Dll, динамически гружу функции все нормально, однако все функции просто НЕ РАБОТАЮТ.
Кто-нибудь может подсказать в чем здесь дело или в каком направлении копать?
Спасибо.


 
Юрий Зотов   (2002-11-13 00:34) [1]

И снова любимая игра в угадайку...
Что ж, будем угадывать... раз код такой секретный...

Начнем с классики - что дает GetLastError?


 
EvgenyDr   (2002-11-13 21:28) [2]

Внутри компонента никаких ошибок не возникает.
Исследование кода внутри DLL показало, что перестает работать связка:
service:=CreateService(...)
StartService(Service,0,NULL)

CreateService отрабатывает нормально, а вот StartService при вызове функции из приложения отрабатывает нормально, а при вызове из компонента дает ошибку. GetLastError в этом случае "не удается найти указанный файл"


 
Юрий Зотов   (2002-11-13 23:26) [3]

Насколько я понял, оба этих вызова находятся внутри одной функции DLL, которая и вызывается из приложения. Тогда, похоже, что-то не так с передачей ее параметров. Но что можно сказать, не видя ни объявления этой функции, ни ее фактического вызова? Ничего, кроме того, что если все правильно, то и вызов из конструктора тоже должен работать.

Еще - видимо, все же nil, а не NULL.


 
EvgenyDr   (2002-11-13 23:47) [4]

Вот эта функция (написана на VС++, но думаю все понятно)
BOOL LoadDeviceDriver( const TCHAR * Name, const TCHAR * Path )
{
SC_HANDLE schSCManager;
SC_HANDLE schService;
BOOL okay;
LPVOID lpMsgBuf;

schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );

schService = CreateService( SchSCManager,
Name,
Name,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
Path,
NULL,
NULL,
NULL,
NULL,
NULL
);
if ( schService == NULL )
return FALSE;

okay = StartService( schService, 0, NULL );

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "FAIL", MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );

CloseServiceHandle( schService );

CloseServiceHandle( schSCManager );

return okay;
}

Так вот из приложения все нормально, а из конструктора StartService дает вышеописанную ошибку. Сама DLL в WINDOWS\SYSTEM32 (WinXP)


 
Юрий Зотов   (2002-11-14 00:03) [5]

А вызов-то? Ведь сама функция, видимо, работает (раз работала), а все дело в вызове и в параметрах. Кстати, отладчиком параметры трассировали, верно ли они передаются?


 
EvgenyDr   (2002-11-14 00:30) [6]

Абсолютно одинаковый вызов, просто копировал.
Сервис-то в обоих случаях успешно создается, но не запускается из конструктора (и используется-то уже хэндл созданного сервиса).


 
apay   (2002-11-14 00:44) [7]

TCHAR как интерпретируется в данном случае? как char или как widechar. может здесь и "порылась собака" :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
7-83026
MsGuns
2002-09-24 23:40
2002.11.25
Процедура списка файлов в каталоге


3-82600
dim-
2002-11-04 11:47
2002.11.25
автоподставление


1-82710
Comp
2002-11-14 17:11
2002.11.25
Тупой вопрос


3-82669
Shadow
2002-11-06 17:20
2002.11.25
Сортировка. Быстрая сортировка


14-83003
Николай Быков
2002-11-08 01:24
2002.11.25
Помогите найти статью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский