Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

вызов из DLL   Найти похожие ветки 

 
olookin   (2003-07-10 16:50) [0]

Не могу вызвать процедуру из ДЛЛ

Код вызова:

unit Unit1;

interface

uses ShareMem, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TDoubleArray = array of double;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll";
function PosInArray(ValueArray: TDoubleArray; Value: double; GetProximal: boolean): integer; external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll";

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var rv: TDoublearray;
i,n: integer;
begin
setlength(rv,11);
randomize;
for i:=0 to 10 do rv[i]:=random(100);
n:=PosInArray(rv,7,true);
end;

end.


Код из библиотеки:

function PosInArray(ValueArray: TDoubleArray; Value: double;
GetProximal: boolean): integer; stdcall;
var i,p: integer;
d: double;
srv: TDoubleArray;
begin
if ValueArray=nil then PosInArray:=0 else
if (Value>=MinValue(ValueArray)) and (Value<=MaxValue(ValueArray)) then begin
if GetProximal=false then for i:=0 to Length(ValueArray)-1 do
if ValueArray[i]=Value then begin p:=i; break; end;
if GetProximal then begin SetLength(srv,Length(ValueArray));
for i:=0 to Length(ValueArray)-1 do srv[i]:=Abs(ValueArray[i]-Value);
ValueInArray(srv,0,Length(srv),"min",p); end; PosInArray:=p; end else
PosInArray:=Length(ValueArray)-1; srv:=nil;
end;

Почему не работает?


 
Poirot   (2003-07-10 16:52) [1]

stdcall при вызове поставь


 
Poirot   (2003-07-10 16:53) [2]

да и сами объявления в имплементатион убери... это же фактически реализация функции!


 
panov   (2003-07-10 17:08) [3]

Что значит - не могу вызвать?


 
olookin   (2003-07-10 17:16) [4]

Код

procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); register;
var i,j,n,len: integer;
m: double;
begin
rv:=Copy(ValueArray,0,Length(ValueArray)); n:=0; len:=Length(rv)-1;
for i:=0 to Length(rv)-1 do begin m:=MinValue(rv);
for j:=0 to Length(rv)-1 do if rv[j]=m then begin
case SortType of 1: ValueArray[n]:=rv[j];
2: ValueArray[len-n]:=rv[j]; end;
Inc(n); rv[j]:=MaxValue(rv); break; end; end; rv:=nil;
end;


 
olookin   (2003-07-10 17:17) [5]

to Poirot - не понял, откуда убрать?


 
panov   (2003-07-10 17:19) [6]

И все же...


 
Poirot   (2003-07-10 17:19) [7]

У тебя в интерфейсе... я неуверен что это правильно! stdcall
так надо!!!

implementation

procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); external "D:\Program files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll"; stdcall;
function PosInArray(ValueArray: TDoubleArray; Value: double; GetProximal: boolean): integer; external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll"; stdcall;


 
olookin   (2003-07-10 17:26) [8]

to Poirot - результат такой же даже когда помещено в implementation

to panov - не могу без ошибки вызвать процедуру из библиотеки...


 
panov   (2003-07-10 17:29) [9]

Блин... ну так что же за ошибка и в каком месте происходит?


 
olookin   (2003-07-10 17:31) [10]

to panov - сейчас ошибка такая - вызов происходит внешне нормально и делается что надо... А при закрытии программы возникает Invalid pointer operation


 
Skier   (2003-07-10 17:31) [11]

>olookin
1) Модуль ShareMem должен быть первым в списке uses
и в host-приложении и в DLL
2) Проверь соглашения о передаче параметров процедуры SortArray
и в host-приложении и в DLL должно быть одно и то же


 
olookin   (2003-07-10 17:37) [12]

to Skier - все уже сделал так как ты говоришь - все равно ошибка...


 
Poirot   (2003-07-10 17:43) [13]

выводи что получил после едита!


 
panov   (2003-07-10 17:45) [14]

PosInArray:=Length(ValueArray)-1; srv:=nil

Почему так?


 
olookin   (2003-07-10 17:51) [15]

to panov - обнуляю массив - он же динамический чего ему висеть...


Для всех - проблема уже решена - всем спасибо..


 
Skier   (2003-07-10 17:59) [16]

>olookin © (10.07.03 17:51)

> Для всех - проблема уже решена - всем спасибо..

А где был косяк ?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
14-78120
Ihor999
2003-07-08 16:05
2003.07.24
HTML парсер.


1-77976
bloodman
2003-07-10 23:14
2003.07.24
Реестр


3-77774
Silver_
2003-07-02 09:52
2003.07.24
ADODataSet.Filter:= (... LIKE ...) AND (... LIKE ...)


14-78124
Chieftain
2003-07-08 11:15
2003.07.24
Выживание человечества в следующие 20 лет


1-77854
Номолос
2003-07-13 08:07
2003.07.24
? про меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский