powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DLL, CodeWarrior
3 сообщений из 3, страница 1 из 1
DLL, CodeWarrior
    #32672572
Григорий Ксендзовский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, у меня вопрос по dll, сделанную на Metrowerks Code Warrior.
DLL, сгенерированная им, прекрасно входит в работу, вызывается одна из функций и даже успеввает что-то сделать. Но когда дело доходит до return, то PB выдаёт сообщение типа Invalid Stack Pointer.
MWCW имеет для dll специальный template, и там составляющие его функции имеют совершенно стандартный описатель:
#define IMPEXP __declspec ( dllexport )
, полностью отвечающий рекмендациям по РВ, данным где-то на ринге, кажется, на PBDR.com. Описание LOCAL EXTERNAL функции тоже стандартное. Стоящие рядом вызовы API работают прекрасно. Параметры также передаются правильно, в соотв. с типами для С и РВ. Ошибка не возникает лишь в одном случае -- ежели dll вообще не имеет параметров. Но кому, простите, нужна void функция в DLL (:?
Что я делаю не так?
ИМХО, на мой непросвещённый взгляд, MWCW на 3 порядка (в 1000 раз) мощнее, иньеллигентнее и удобнее, чем MSVC. Единственный нюанс, который я обнаружил - то, что библиотеки типа .LIB (advApi, KERNEL, USER etc) у него зачем-то обрезаны. Но если скопировать их из WATCOM кодогенерации Power Builder'а, то всё становится ОК.
Итак, "Дайте Серому Коту звёздочку вон ту...",
которая называется Передача параметров в dll-функцию на MWCW.
GrayCat
...
Рейтинг: 0 / 0
DLL, CodeWarrior
    #32672692
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое может происходить, когда функция в dll имеет неправильную конвенцию вызова, например, не stdcall, а cdecl. В этом случае могут неправильно интерпретироваться параметры и забиваться адрес возврата, после чего и имеем Invalid Stack Pointer

Проверь конвенцию вызова, чтобы она была stdcall (по-моему, pascal в си, но тут я могу и ошибаться).

Сергей
...
Рейтинг: 0 / 0
DLL, CodeWarrior
    #32673884
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На ВижуалСтудио у меня проходила такая декларация pbmq.CPP

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
extern "C"  int WINAPI  pbmq_message(
	LPCTSTR     Message)
{
	MessageBox(NULL,  Message, "Message", MB_OK);
	return  1 ;
}

BOOL APIENTRY DllMain( HANDLE hModule, 
...
И DEF файл

Код: plaintext
1.
LIBRARY	pbmq
pbmq_message
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DLL, CodeWarrior
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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