powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Стыковка DLL (C++) и программы на Delphi
7 сообщений из 7, страница 1 из 1
Стыковка DLL (C++) и программы на Delphi
    #33122301
smv2001ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите решить задачку:
Есть программа, написанная на паскале, исходников к ней нет. В ней предусмотрен динамический вызов из DLL функций вида
Код: plaintext
TDLLFunc =  function  (inParam:PChar;outParam:PChar;outSize:integer): Integer;
Причем способ передачи параметров явно не задан, а скорее всего используется по-умолчанию.

Вопрос: каким должен быть прототип данной функции на С++?
Пробовал
Код: plaintext
extern "C" int __stdcall function(char * inParam, char * outParam, int outSize)
не работает.

Есть идеи?
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122322
Silvy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smv2001ua
"C"
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122330
smv2001ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понял, если можно поподробнее :)
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122340
Silvy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smv2001uaне понял, если можно поподробнее :)
попробуй убрать "С"
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122512
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smv2001ua
Код: plaintext
TDLLFunc =  function  (inParam:PChar;outParam:PChar;outSize:integer): Integer;
Вопрос: каким должен быть прототип данной функции на С++?
Пробовал
Код: plaintext
extern "C" int __stdcall function(char * inParam, char * outParam, int outSize)
не работает.
Для какого С/С++ компилятора?
Borland C/C++ 5.* сработает такое:
int __stdcall _export function(char * inParam, char * outParam, int outSize);

для MS VC 6 надо писать по другому:
int __stdcall __declspec(dllexport) function(char * inParam, char * outParam, int outSize);

Не важно С или С++ код внутри функции будет.

Для компиляторов других типов сходу не помню как надо писать. В начале, под виндами был придуман синтаксис типа:
int __stdcall function(char * inParam, char * outParam, int outSize);
внутри кода, а потом делался дополнительный Project.def файл в котором указываются какие именно функции должны быть экспортированы в dll.
---- Project.def
LIBRARY Project.dll
EXPORTS
function = _function @1;
---------------
То есть функцию _function экспортировать под именем function и расположить ее под номером 1 в списке экспорта.
В общем, этот подход (через def) универсален и поддерживается всеми виндовыми компиляторами. Project.def скармливается конечно линкеру а не компилятору :)
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122721
smv2001ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlДля какого С/С++ компилятора?
Borland C/C++ 5.* сработает такое:
int __stdcall _export function(char * inParam, char * outParam, int outSize);

для MS VC 6 надо писать по другому:
int __stdcall __declspec(dllexport) function(char * inParam, char * outParam, int outSize);

для VC++

White OwlДля компиляторов других типов сходу не помню как надо писать. В начале, под виндами был придуман синтаксис типа:
int __stdcall function(char * inParam, char * outParam, int outSize);
внутри кода, а потом делался дополнительный Project.def файл в котором указываются какие именно функции должны быть экспортированы в dll.
---- Project.def
LIBRARY Project.dll
EXPORTS
function = _function @1;
---------------
То есть функцию _function экспортировать под именем function и расположить ее под номером 1 в списке экспорта.
В общем, этот подход (через def) универсален и поддерживается всеми виндовыми компиляторами. Project.def скармливается конечно линкеру а не компилятору :)
Странно, но на этапе линковки ругается на DEF файл, пишет что
_function неизвестное имя... (unresolved external name)
...
Рейтинг: 0 / 0
Стыковка DLL (C++) и программы на Delphi
    #33122799
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smv2001uaСтранно, но на этапе линковки ругается на DEF файл, пишет что
_function неизвестное имя... (unresolved external name)
Если в коде есть такое:
int __stdcall __declspec(dllexport) function(char * inParam, char * outParam, int outSize)
То def файл уже не нужен совсем.

Либо:
int function(char * inParam, char * outParam, int outSize)
и Myproject.def
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Стыковка DLL (C++) и программы на Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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