Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Стыковка DLL (C++) и программы на Delphi / 7 сообщений из 7, страница 1 из 1
17.06.2005, 16:18
    #33122301
smv2001ua
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
Помогите решить задачку:
Есть программа, написанная на паскале, исходников к ней нет. В ней предусмотрен динамический вызов из 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
17.06.2005, 16:27
    #33122322
Silvy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
smv2001ua
"C"
...
Рейтинг: 0 / 0
17.06.2005, 16:31
    #33122330
smv2001ua
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
не понял, если можно поподробнее :)
...
Рейтинг: 0 / 0
17.06.2005, 16:34
    #33122340
Silvy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
smv2001uaне понял, если можно поподробнее :)
попробуй убрать "С"
...
Рейтинг: 0 / 0
17.06.2005, 17:49
    #33122512
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
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
17.06.2005, 19:33
    #33122721
smv2001ua
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
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
17.06.2005, 21:07
    #33122799
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стыковка DLL (C++) и программы на Delphi
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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Стыковка DLL (C++) и программы на Delphi / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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