Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL from Delphi to Builder / 10 сообщений из 10, страница 1 из 1
27.10.2003, 18:32
    #32306656
anton smirnoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
Создаю DLL в Делфи
library Project1;
uses
SysUtils,
Classes;
function sum(var x,y:integer):integer;export;stdcall;
begin
result := x + y;
end;
exports
sum;
end

Загружаю её в Билдере

int (__stdcall * func)(int,int);
func = (int ( __stdcall *) (int,int))GetProcAddress(dll_handle, "sum");

всё вроде хорошо, func!=NULL,
но вот вызов функции (ex. func(100,1)) выдаёт аксесс виолейшион
????
...
Рейтинг: 0 / 0
28.10.2003, 03:23
    #32306843
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
про стандарты на вызовы функций слышал? Так вот они разные у Си и Паскаля.
так что в описание фонкций указывай явно стандарт. например stdcall и будешь иметь счастье
...
Рейтинг: 0 / 0
28.10.2003, 10:45
    #32307071
anton smirnoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
на самом деле надо var убрать, наверное,
function sum(x,y:integer):integer;export;stdcall;
но это тоже не помогает

2StarWind
а разве я не поставил stdcall
{
library Project1;
uses
SysUtils,
Classes;
function sum( x,y:integer):integer;export;stdcall
;
begin
result := x + y;
end;
exports
sum;
end

int ( __stdcall * func)(int,int);
func = (int ( __stdcall *) (int,int))GetProcAddress(dll_handle, "sum");
}
...
Рейтинг: 0 / 0
28.10.2003, 14:09
    #32307461
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
var точно ошибочен.
...
Рейтинг: 0 / 0
29.10.2003, 03:58
    #32308209
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
сорри, не заметил
а спецификация var работает...
например функция CreateThread описание в дельфи Tid потока именно как var
кстате, можно посмотреть как это же описывается в С. В том же самом хелпе на эту функцию. var по идее это указатель на переменную
...
Рейтинг: 0 / 0
29.10.2003, 09:51
    #32308341
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
Да, но при вызове шаблон процедуры тогда должен в точности повторить этот var, а в данном случае это сделано не было и константы 100 и 1 передались как адреса - вот и AV.
...
Рейтинг: 0 / 0
29.10.2003, 10:34
    #32308430
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
насколько я помню описание var a:integer и a :^integer одно и тоже
...
Рейтинг: 0 / 0
29.10.2003, 10:45
    #32308464
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
Не спорьте. Этот топик есть и в С++шном форуме, там уже про var все выяснили.
...
Рейтинг: 0 / 0
29.10.2003, 10:47
    #32308470
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
Но вопрос так и не решили (оказалось, что все гораздо сложнее).
...
Рейтинг: 0 / 0
29.10.2003, 10:49
    #32308474
Дятел
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL from Delphi to Builder
Только что проверил. Если убрать var, то все работает, а если хочется с Varom, то и описывать ее в С++ надо с varom:
Код: plaintext
1.
int (__stdcall *func)(int&,int&)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL from Delphi to Builder / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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