Вызов внешней функции из DLL с ошибкой PowerBuilder 10.0 - PullRequest
2 голосов
/ 31 августа 2011

Я создал библиотеку DLL с использованием Visual C ++ 2008, которая создает две внешние функции.Используя python, я создал две отдельные исполняемые функции для их запуска.При использовании PowerBuilder для вызова функции первый исполняемый файл работает нормально.Второй исполняемый файл приводит к ошибке времени выполнения: error calling external function %s.Я использую файл .def и имею правильные порядковые номера для каждой функции.Любой совет?

Объявления функций в C следующие (извините, они довольно длинные):

extern "C" int __stdcall start_proctor( double points[], double weights[], double opoints[],  double &SG, char sg_estimated[], double &smooth, char ptitle[], double &pheight, double &pwidth, char save_location[], int &show, int &ZV, char roundM[], char roundD[], int &zoom, char cwd[], int &x_scale_major_tick,int &y_scale_major_tick, char points_of[], char points_color[], char points_type[], int &points_size, char curve_of[], char curve_color[], int &curve_alpha, int &curve_size, char grid_of[], char grid_color[], int &grid_alpha, int &grid_x_dash, int &grid_y_dash, char opt_of[], char opt_color[], int &opt_alpha, int &opt_x_dash, int &opt_y_dash, int &x_scale_major_tick_c, int &y_scale_major_tick_c, char points_of_c[], char points_color_c[], char points_type_c[], int &points_size_c, char curve_of_c[], char curve_color_c[], int &curve_alpha_c, int &curve_size_c, char grid_of_c[], char grid_color_c[], int &grid_alpha_c, int &grid_x_dash_c, int &grid_y_dash_c, char opt_of_c[], char opt_color_c[], int &opt_alpha_c, int &opt_x_dash_c, int &opt_y_dash_c, int &return_default, int &splash, double &optmoisture, double &maxdd,  double &percent_oversized, double &o_SG , double &o_moisture, double &o_optmoisture, double &o_maxdd, int &oversized_flag, int &debug, char c_output[] );

extern "C" int __stdcall start_grain_size( char dsn_name[], char userID[], char passwd[], double test_data[], int &td_length, double upper_bound[], int &ub_length, double lower_bound[], int &lb_length, char envelope[], char specification[], char pointmarker[], char splinemarker[], char display[], char scale[], char units[], char xlabel[], char direction[], char maximum_density_line[], int &pan, char title[], char save_location[], char cwd[], int &show, double &width, double &height, char output[] );

В powerbuilder объявления внешних функций:* start_grain_size приводит к ошибке

Ответы [ 2 ]

0 голосов
/ 22 марта 2013

Я собираюсь сделать дикую догадку (еще не достаточно информации, чтобы быть уверенным) и сказать, что приложение PB испытывает трудности с поиском рассматриваемой DLL. Вы можете подтвердить это с помощью Process Monitor для просмотра вашего приложения PB (убедитесь, что вы установили фильтр так, чтобы имя процесса соответствовало вашему приложению, иначе вы получите поток информации, хотя вы можете фильтровать после факт) и следить за любыми сбоями доступа к DLL на случай сбоя. Это может быть что-то вроде текущего каталога, который изменяется, и расположение DLL зависело от этой ссылки в цепочке поиска.

Если это так, я бы порекомендовал создать Путь к приложению для вашего приложения, который включает путь к вашему приложению, даже если это только папка с вашим EXE-файлом. ИММ, он решил такие проблемы.

Удачи,

Терри.

0 голосов
/ 26 октября 2011

Я не вижу ничего плохого в коде PB. Я думаю, что ваша ошибка в коде C, который вызывает Python. Возможно, вы не указали имя функции, которую хотите вызвать правильно. Это то, что предлагает% s в сообщении об ошибке. Я пометил этот вопрос для python-c-api, чтобы попытаться привлечь нескольких гуру. Они, несомненно, захотят увидеть ваш C-код, который вызывает Python.

...