|
|
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
ПОМОГИТЕ!!!! Оригинал прототипа ф-ции на С int SetDir( const char * path ); как я только не пробовал объявлять в Declare Global External Functions прототип этой ф-ции, и чё только не пробовал передавать......и всегда получал вот такую ошибку: Application terminated. Error: Specified argument type differs from required argument type at runtime in DLL function SetDir. (invalid stack pointer on return from function call) at line 20 in clicked event of ob]ect cb_l of w_main. Для примера приведу пару примеров закончившихся получением этой ошибки: прототип FUNCTION int SetDir(string path) LIBRARY "xapi.dll" или в прототипе как ref string path или сhar path[] или blob path Чё это за ошибка? Как правильно написать .....или чё воще делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2003, 23:09 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
А зачем тебе эта ф. то? есть же в PB аналог !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2003, 23:13 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Всмысле аналог? Мне надо выполнить в PB ф-цию из внешней DLLки ....а я вот обламываюсь и всё!!! Вроде и объявил как надо, а всё равно еррор выдаёт! Я знаю прототип к этой ф-ции на Си-шке, а на PB чёто не заводится!!! Пробовал из VC++ выполнять, то ф-ция работает! Мож я чё нетак объявил и ли не так параметры передал??? I need help!!! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2003, 23:52 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
А она у тебя Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2003, 23:57 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Чесно говоря все внешние ф-ции которые я раньше подключал были лиш парочка API ф-циями! :( Так чё я далеко не профи в Этом деле, и понятия не имею, что значит __stdcall ...... Эсли не затруднить объясните в двух словах! Что зделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 00:04 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
PowerBuilder поддерживает только DLLы с функциями экспортированными используя __stdcall calling convention (многие компайлеры используют __cdecl convention по умолчанию) Если компилишься как C++, a не C, тогда декларируй экспортируемые функции как extern "C", т.е.: // Declare the function, probably in a header file extern "C" _declspec(dllexport) int __stdcall Test(); // Define the function extern "C" _declspec(dllexport) int __stdcall Test() { // your code here } Кроме того, чтобы экспортировать твои функции без '__stdcall name mangling' используй module definition file (*.DEF). (The __stdcall calling convention prepends a leading underscore, and appends '@xxx', to the function name, where the xxx in @xxx in the size, in bytes, of the function's parameters). Например: ;*************************************************************************** * ;* dlltest.def - Module Definition File ;*************************************************************************** * LIBRARY DLLTEST DESCRIPTION "Your description goes here" EXPORTS Test=_Test@0 Just include the *.DEF file in your project. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 00:23 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Вобщем так! Как бы я не пробовал использовать эту внешнюю ф-цию - всегда созерцаю вот такую ошибку: Application terminated. Error: Specified argument type differs from required argument type at runtime in DLL function SetDir. (invalid stack pointer on return from function call) at line 20 in clicked event of ob]ect cb_l of w_main. Если не затруднит, то объясните что зделать , что б ф-ция заработала? Заранее ПАСИБА! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 00:24 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
У меня есть в наявности к этой готовой DLL-ке .lib , .h ну и сам .dll файл! Могу ли что то зделать с ними , что может мне помоч запустить ф-цию с длл-ки??? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 00:32 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Определи параметр не как Код: plaintext Код: plaintext Это должно тебе помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2003, 16:33 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
ФилиппPowerBuilder поддерживает только DLLы с функциями экспортированными используя __stdcall calling convention (многие компайлеры используют __cdecl convention по умолчанию) ... Кроме того, чтобы экспортировать твои функции без '__stdcall name mangling' используй module definition file (*.DEF). Недавно делали dll-ну (на msvc 6), которая экспортирует функцию для использования в ПБ 9.0.3. Эта функция принимает параметры (число, строку), возвращает число. Всё заработало с использованием префикса __stdcall в объявлении функции и описания её в def-файле.. но без def-файла ничего не выходит! вопрос (не очень надо, просто интересно ): можно ли обойтись без описания функции в def-файле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 11:21 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
savosin_sergey wrote: > Недавно делали dll-ну (на msvc 6), которая экспортирует функцию для > использования в ПБ 9.0.3. Эта функция принимает параметры (число, > строку), возвращает число. > > Всё заработало с использованием префикса __stdcall в объявлении функции > и описания её в def-файле.. но без def-файла ничего не выходит! > > *вопрос* (не очень надо, просто /интересно/): можно ли обойтись без > описания функции в def-файле? Лень пробовать самому (я не Сишник), но я бы попробовал что-то типа: extern "C" { long WINAPI MyCoolFunc(long lParm, const char *sParm); } Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 11:37 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
madmaxУ меня есть в наявности к этой готовой DLL-ке .lib , .h ну и сам .dll файл! Могу ли что то зделать с ними , что может мне помоч запустить ф-цию с длл-ки??? :( Как я понимаю исходников DLL у вас нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 11:42 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Dim2000 savosin_sergey wrote: Лень пробовать самому (я не Сишник), но я бы попробовал что-то типа: extern "C" { long WINAPI MyCoolFunc(long lParm, const char *sParm); } не работает, пробовали Estets Как я понимаю исходников DLL у вас нет? есть :) то связано с постом о переводе картинки буфера обмена в jpg - описание исходников -------------- 0. функция long GetImagefromCB (string filepath, long quality) предназначена для сохранения изображения, находящегося в буфере обмена в jpg-файл с заданным качеством 1. сборка dll - надо скачать ftp.oviont.sokol.ru/cximage.rar - открыть в msvc6 файл CxImgLib.dsw - нажать F7 (должен быть активныйм прект clib, конaигурация release - в clib\release появится clib.dll - def-файл находится в clib\clib.def - исходник clib.dll в demo2\console.cpp 2. подключение к PB Код: plaintext 1. 3. использование в PB Код: plaintext 1. 2. 3. 4. 5. библиотека cximage взята с codeproject.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 12:59 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
В том проекте .Def просто лежит в каталоге и не подключен в проект. Поэтому имя в DLL получается неюзабельное: "?GetImagefromCB@@YGHPADH@Z" В самой DLL ф-я описана верно: Код: plaintext В PB я бы описал так : Код: plaintext PS. И ссылка на архив неверная :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 14:48 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВ том проекте .Def просто лежит в каталоге и не подключен в проект. ну не подключён -- это результат утомительных опытов "на ощупь". с def-файлом всё работает. я решил, что def-файл -- старьё (раньше даже win16-приложение надо было собирать с def-файлом: для того, чтобы какой-то stub прилинковался -- сам я не пробовал, вычитал в книжках), и обойти всякими extern "C", или ещё какими-нибудь командами компилятору.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 15:21 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky PS. И ссылка на архив неверная :) ссылка да, с ошибкой, вот вроде без ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 15:23 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
savosin_sergey Anatoly MoskovskyВ том проекте .Def просто лежит в каталоге и не подключен в проект. ну не подключён -- это результат утомительных опытов "на ощупь". с def-файлом всё работает. я решил, что def-файл -- старьё (раньше даже win16-приложение надо было собирать с def-файлом: для того, чтобы какой-то stub прилинковался -- сам я не пробовал, вычитал в книжках), и обойти всякими extern "C", или ещё какими-нибудь командами компилятору.. Без .DEF только так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 16:50 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
savosin_sergey вопрос (не очень надо, просто интересно ): можно ли обойтись без описания функции в def-файле?Нет, нельзя. Def файл дает тебе возможность сделать переименование любого экспортируемого имени. Без def-файла такое переименование сделать невозможно. Что за странная нелюбовь к def'ам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 18:03 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Без .DEF только так: Код: plaintext 1. 2. спасибо! нда, видно в хелп не судьба мне было посмотреть.. но тогда зачем extern "C" ? без него просто манглы будут страшней: Код: plaintext ваще мне казалось , что можно как-то в исходниках cpp указать линкеру не манглить имя! White Owl Без def-файла такое переименование сделать невозможно. Что за странная нелюбовь к def'ам? просто мне кажется , что я что-то недопонял в опциях линкера или в командах препроцессора.. уже подхожу к тому, что def-файл -- единственная подходящая вещь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 19:09 |
|
||
|
ПОМОГИТЕ запустить EXTERNAL FUNCTION int SetDir( const char * path );
|
|||
|---|---|---|---|
|
#18+
savosin_sergeyно тогда зачем extern "C" ? без него просто манглы будут страшней: Код: plaintext Потому что _GetImagefromCB@8 выводится элементарно из прототипа ф-и, а чтобы получить это "?GetImagefromCB@@YGHPADH@Z" надо смотреть в бинарнике что вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 20:02 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=33936937&tid=1337629]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 375ms |

| 0 / 0 |
