Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > функция из dll


Автор: _hunter 28.10.2003, 21:50
Работаю в Builder-e

Пишу в нем такой код:
Код
HINSTANCE Hlib = LoadLibrary("c:\\winnt\\system32\\advapi32.dll");
if(!Hlib){ return;}

FARPROC W = GetProcAddress(Hlib,"CreateProcessWithLogonW");
[COLOR=red]
BOOL rez = ((CreateProcessWithLogonW*)W)(aName,aSrv,aPassw,1,pName,pName,0,NULL,NULL,&si, &pi);[/COLOR]
//ошибка: Expression syntax



что я не так делаю?

Автор: valex13 29.10.2003, 05:32
Вместо FARPROC я бы сделал так:

Код

typedef bool(_stdcall *func)
(
//Описываю параметры функции
//Например
char[20] aName,
char[20] aSrv,
char[25] aPss,
char[25] pName,
int iType,
// и т.д.
);

func bCreateProcessWithLogonW;
bCreateProcessWithLogonW = (func) GetProcAddress(Hlib,"CreateProcessWithLogonW");
ASSERT(bCreateProcessWithLogonW !=NULL);
bool bRezult = bCreateProcessWithLogonW(aName,aSrv,aPassw,1,pName,pName,0,NULL,NULL,&si, &pi );



Мне кажеться так будет правильней. В твоем случае наверно :
Код

BOOL rez = (bool)W(aName,aSrv,aPassw,1,pName,pName,0,NULL,NULL,&si, &pi);


Автор: RAN 29.10.2003, 08:16
valex13 прав, что CreateProcessWithLogonW - это не тип, это имя функции. Но его пример тоже не пойдёт, stdcall не покатит.

Автор: valex13 29.10.2003, 09:18
Все зависит от DLL. Может он пишет функции с вызовом stdcall. Вызов можно и не ставить, тогда будет Си-шный по умолчанию. Это всего лишь пример.
_hunter не указал какая именно у него DLL и на чем она "спаяна".

Автор: _hunter 29.10.2003, 22:28
В смысле не указал?:
LoadLibrary("c:\\winnt\\system32\\advapi32.dll");
Спаяна, я думаю на Visual C (или на чем там Microsoft пишет smile.gif )

Автор: valex13 30.10.2003, 09:18
Ну и что?
Цитата

LoadLibrary("c:\\winnt\\system32\\advapi32.dll");

Это ничего не указывает. Во всяком случае мне advapi32.dll ничего не говорит. Конечно, может быть это набор API функции, тогда конечно stdcall нельзя указывать, но ведь я тоже могу написать DLL и назвать ее так же!

Автор: _hunter 30.10.2003, 19:12
я имел в виду что функция - стандартная и поставляется с Виндой(>2000). Что в этом случае писать?

Автор: man2002ua 31.10.2003, 11:36
hunter, надеюсь письмо ты получил smile.gif
для остальных - функция CreateProcessWithLogonW понимается Builder-oм и использовать ее можно по-человечески biggrin.gif

Автор: _hunter 31.10.2003, 12:11
Спасибо, получил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)