powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL from Delphi to Builder
13 сообщений из 13, страница 1 из 1
DLL from Delphi to Builder
    #32306650
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю 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
DLL from Delphi to Builder
    #32306724
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>function sum( var x,y:integer):integer;export;stdcall;
Наверное
function sum(x,y:integer):integer;export;stdcall;
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32306782
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так вот anton smirnoff если ты пишешь в дельфи
function sum( var x,y:integer):integer;export;stdcall;
то почему в билдере так:

int (__stdcall * func)(int,int);

а не скажем так:
int (__stdcall * func)(int&,int&); ? (хотя может я не прав и надо писать скажем так :
int (__stdcall * func)(int*,int*); с этим моментом я не уверен на 100%)
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307063
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, на счёт var я может и погорячился (ну не писал я раньше на Делфи)
но вот попробовал без var , такая же лабуда
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307079
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя написано var x,y:integer,
а ты туда передаешь константы. Потому и возникает Access violation.
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307085
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
см. выше, я var убрал, всё равно тоже самое, может в первый раз
вызовется, вернёт какую-то глупость, а на 2-ой, 3-ий, ..., раз опять
аксесс виолейшион
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307105
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef int (__stdcall * lpfunc)(int,int);
. . .
void __fastcall TForm1::Button1Click(TObject *Sender){
  AnsiString dllSource = ExtractFilePath(Application->ExeName)+ "dll.dll" ;

  if( HMODULE masterDll = LoadLibrary(dllSource.c_str()) ){
    if( lpfunc MyFunc = (lpfunc)GetProcAddress(masterDll, "sum" ) ){
      long lResult = MyFunc( 101 , 1 );
      Application->MessageBox(IntToStr(lResult).c_str(),"", 0 );
    }
    FreeLibrary(masterDll);
} }
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307120
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2ZrenBy
слушай, всё получилось, почему?
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307127
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что из-за

typedef int (__stdcall * lpfunc)(int,int);
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307135
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробую то-же, только real VS float (оба 8 байт)
нихрена, может у меня лыжи не катят
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307146
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оказалось
real -> double
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307193
anton smirnoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на самом деле всё не тревиально, надо изменить у TCustomADODataSet
динамические свойства, к которым в Buildere не подступишься. Что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
library MyDll;
uses
  SysUtils,
  Classes,
  adodb,
  adoint;
{
 prop_index :=  1  'Update Criteria'
 prop_index :=  2  'Update Resync'
}
function SetDinamicProp(var ds:TCustomADODataSet;prop_index:integer;val:integer):boolean;export;stdcall;
  Result :=True;
begin
if prop_index =  1  then
 begin
  ds.Properties['Update Criteria'].Value := val;
  Result :=True;
 end
else
if prop_index =  2  then
 begin
  ds.Properties['Update Resync'].Value := val;
  Result :=True;
 end
else
  Result :=False;


end;
exports
SetDinamicProp;
end.
...
Рейтинг: 0 / 0
DLL from Delphi to Builder
    #32307293
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:надо изменить у TCustomADODataSet
динамические свойства, к которым в Buildere не подступишься
Не понял. Это какие свойства можно изменить в Delphi, а в Builder-e нельзя?
Они же как близнецы похожи, только язык разный.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL from Delphi to Builder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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