я сделал прогу которая в win9x использует RegisterServiceProcess но в xp она не компилится. че делать
|
| JCooper |
09-05-2004 16:11 205379 |
pomka эта ф-ция работает лишь на платформе 9х.
|
я понял мне не надо чтобы она работала, мне надо чтобы она компилировалась, но при компиляции он говорит что такой функции в rundll нет. может там директиву какую нибудь роставить
|
| hasherfrog |
11-05-2004 08:51 205381 |
Guest
Возьмите нужную dll от Win9x и явно укажите её при компиляции. При работе можно также поступить - определить версию виндов и подгрузить соответствующую dll. Что-то вроде этого. Проблема в том, что эти библиотеки придется таскать с собой (как раз для компиляции, при работе они уже должны быть в windows\system32)
Народ, поправьте меня, если наврал.
|
А её в RunDll и нет. Она в Kernel32. А для того, чтобы подключалась, нужно LoadModule и GetProcAddress
|
В XP мне эта функция не нужна, мне надо чтобы прога в xp компилилась. если я явно укажу dll то в winme эта функция работать не будет.
[s]Исправлено: Prisoner, 4:46 22-05-2004[/s]
|
Используй GetProcAddress. Будет работать, даже если требуемой функции вообще нет.
|
| hasherfrog |
26-05-2004 11:51 205386 |
Случайно набрёл. Решим вопрос раз и навсегда.
Код:
#include <iostream.h>
#include <windows.h>
BOOL (WINAPI *RegisterServiceProcess)(DWORD dwProcessId,DWORD dwType);
int main(){
HINSTANCE hKernel;
int i=1;
//Пытаемся получить идентификатор загруженной библиотеки
hKernel=LoadLibrary("KERNEL32.DLL");
if(hKernel){
//Идентификатор загруженной библиотеки был успешно получен
cout<<"Success load library kernel32.dll"<< endl;
RegisterServiceProcess=(int(__stdcall*)(DWORD,DWORD))GetProcAddress(hKernel,"RegisterServiceProcess");
if(RegisterServiceProcess){
//Указатель на функцию RegisterServiceProcess был
//успешно получен.
cout<<"Success to have address of the specified exported dynamic-link library (DLL) function"<< endl;
if(RegisterServiceProcess(GetCurrentProcessId(),i))
cout<<"Success registers the process as a service process"<< endl;
//Процесс был успешно зарегестрирован как сервис
}else{
//Указатель на функцию RegisterServiceProcess не
//был успешно получен.
cout<<"Failed to have address of the specified exported dynamic-link library (DLL) function"<< endl;
cin>>i;
return 0;
}
}else{
//Идентификатор загруженной библиотеки не был получен
cout<<"Failed load library kernel32.dll"<< endl;
cin>>i;
return 0;
}
cout<<"Registers the process as a service process:1"<< endl;
cout<<"Unregisters the process as a service process:0"<< endl;
cin>>i;
if (RegisterServiceProcess(GetCurrentProcessId(),i)){
cout<<"Success"<< endl;
}else{
cout<<"Failed"<< endl;
}
cin>>i;
return 0;
}
/*Для компиляции использовался MSVC5, проект типа Console Application,
чтобы в процессе сборки не было недоразумений проверьте на вкладке Link
поле Object libraries/modules, оно должно быть пустым. */
|
Время: 11:28.
© OSzone.net 2001-