Вызов C (открытой) функции из программы COBOL - PullRequest
1 голос
/ 10 мая 2010

Некоторое время назад я создал DLL для использования в другой программе на Си. В основном я выставил конкретные функции, используя следующие в моей DLL:

void __declspec(dllexport) MyFunc(myFirstArg, mySecondArg);

Затем я добавил внешний файл (MyExposedDll.h) со всеми открытыми функциями и структурами в новую программу на C и включил его:

#include MyExposedDll.h

Теперь, как я могу использовать эту dll (или главным образом dll) для функции Cobol? Мне нужно выставить функцию, которая имеет два char* аргумента и возвращает логическое значение.

Спасибо, Вс

1 Ответ

3 голосов
/ 10 мая 2010

Это не должно быть сложно в среде IBM Z / OS с поддержкой LE.

Захватить логический результат, используя COBOL ВОЗВРАЩЕНИЕ ВЫЗОВА форма заявления CALL. Строковые аргументы передаются так же, как и любые другие аргументы в выражении COBOL CALL. Единственное, что следует опасаться, это то, что C использует строки с нулевым символом в конце, тогда как COBOL, как правило, этого не делает. Вы должны рассмотреть как обрабатывать строки с нулевым символом в конце в COBOL.

Посмотрите на: Использование DLL-библиотек COBOL с программами на C / C ++ Это дает действительно простой пример, показывающий вызов функции C ++, возвращающей указатель на функцию.

EDIT Возможно, я пропустил часть вашего вопроса ... Когда ваша программа на COBOL редактируется по ссылкам, вам нужно предоставить файл DLL IMPORT, чтобы он мог быть связан. См связывание DLL .

РЕДАКТИРОВАТЬ 2

Исходя из ваших комментариев, я так понимаю, вы запускаете свое приложение на коробке Z / OS. Visual Studio - это продукт для ПК, поэтому я предполагаю, что вы разрабатываете там свой код, но развертываете его в Z / OS? Чтобы программа COBOL распознала вашу DLL, вам нужно создать «побочный файл» из вашей программы на C, когда она будет скомпилирована. Этот «побочный файл» содержит структуры DLL, необходимые компоновщику при связывании программы COBOL. Вы должны быть в состоянии понять процесс по ссылкам, указанным выше.

...