Интерфейс DLL для использования через WINAPI

Обсуждение программ nnCron и nnCron LITE

Интерфейс DLL для использования через WINAPI

Postby Gunslinger » Tue, 02 Nov 2004, 08:52

Какой интерфейс должен быть у функции, чтобы ее можно было вызывать через WINAPI? Тот же что и RunDll32.exe требует?
Code: Select all
void CALLBACK EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);
Gunslinger
 
Posts: 4
Joined: Tue, 02 Nov 2004, 08:45

Postby Nicholas_Nemtsev » Wed, 03 Nov 2004, 12:17

Что-то типа того.
А в чём проблема-то?
Nicholas Nemtsev
User avatar
Nicholas_Nemtsev
Site Admin
 
Posts: 857
Joined: Thu, 01 Jul 2004, 22:25
Location: Псков

Postby Gunslinger » Wed, 03 Nov 2004, 13:24

Что-то типа того.

:lol: :lol: :lol:

Есть dll со следующей функцией:
Code: Select all
int Func(char str[257])
{
   MessageBox(NULL, str, str, MB_OK);
   return -1;
}


В nncron'е есть такая задача:
Code: Select all
#( dll_test_no_param
RunOnce
NoDel
Time: 18 13 30 10 * 2004
WINAPI: Func RASFUNC.DLL
Action:
S" <text>" Func DROP
IF
MSG: "1"
ELSE
MSG: "2"
THEN
)#


Так вот - не получается передать строку в функцию. Соответственно вопрос в том - где я гоню: в интерфейсе функции или при вызове ее из nncron'а?
Last edited by Gunslinger on Wed, 03 Nov 2004, 17:10, edited 1 time in total.
Gunslinger
 
Posts: 4
Joined: Tue, 02 Nov 2004, 08:45

Postby Nicholas_Nemtsev » Wed, 03 Nov 2004, 14:25

Ты загляни в саму RASFUNC.DLL (есть програмки типа dumppe, плагины в FAR'е и т.д). Вполне может быть, что entry point выглядит совсем не так, как ты написал в исходнике.
1. Функция должна быть описана примерно так:
LRESULT CALLBACK shell_proc(...)
2. Нужно создать def-файл с описанием импорта.

Да, и фортовские строчки надо передавать без счётчика, либо указать счётчик в качестве параметра.
Nicholas Nemtsev
User avatar
Nicholas_Nemtsev
Site Admin
 
Posts: 857
Joined: Thu, 01 Jul 2004, 22:25
Location: Псков

Postby Gunslinger » Wed, 03 Nov 2004, 17:10

Сама по себе dll рабочая:
Code: Select all
HMODULE DLL;
DLL = LoadLibrary("rasfunc.dll");
void (*Func)(LPSTR);
(FARPROC &)Func = GetProcAddress(DLL, "Func");
Func("<text>");
FreeLibrary(DLL);

Так оно прекрасно работает.

Можно правильный вызов функции на форте, с передачей строки, если параметром идет char str[257]?
Gunslinger
 
Posts: 4
Joined: Tue, 02 Nov 2004, 08:45

Postby Nicholas_Nemtsev » Wed, 03 Nov 2004, 17:16

Nicholas Nemtsev
User avatar
Nicholas_Nemtsev
Site Admin
 
Posts: 857
Joined: Thu, 01 Jul 2004, 22:25
Location: Псков

Postby Gunslinger » Wed, 03 Nov 2004, 18:35

thx, все работает (и что я сразу в этот экзампл не въехал, хотя хелп смотрел)

а то я прикинул, что некоторые вещи мне проще на сях в dll вынести, чем пытаться на форте извернуться
Gunslinger
 
Posts: 4
Joined: Tue, 02 Nov 2004, 08:45


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron