Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Работа c сишными dll в Delphi   Найти похожие ветки 

 
Danila_master ©   (2007-02-23 15:29) [0]

Всем привет, подскажите, кто сможет где моя ошибка
Есть такая dll написанная на сях
#include <windows.h>

extern "C" _declspec( dllexport )float testValue(float* mas);

float testValue(float* mas)
{
   return mas[0];
}

И программка на дельфях
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TA = array of real;
 TForm1 = class(TForm)
 procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 function testValue(mas: TA): real; external "CenterCalculation.dll";

var
 Form1: TForm1;

implementation

{$R *.dfm}
  procedure TForm1.FormShow(Sender: TObject);
  var
    s: TA;
  begin
    SetLength(s, 2);
    s[0] := 2.5;
    s[1] := 3.0;
    ShowMessage("Test - " + FloatToStr (testValue(s)));
  end;
end.

Результат выдает вообще левый 7,984....
В чем ошибка? или из дельфи нельзя посылать динамические массивы?


 
Ega23 ©   (2007-02-23 16:13) [1]

Сначала скажи, что такое _declspec. Если не знаешь, попробуй добавить после real; или cdecl; или stdcall;

function testValue(mas: TA): real; cdecl; external "CenterCalculation.dll";

или

function testValue(mas: TA): real; stdcall; external "CenterCalculation.dll";


 
Danila_master ©   (2007-02-23 16:32) [2]

Я точно не знаю, что значит _declspec, но эта форма была написана в книге.
С cdeclи stdcall пробовал, не помогает. Как я понимаю проблема в передаче динамического массива с делфи в библиотеку. Но в чем конкретно? Я не знаю. Хотя может я и не прав.


 
Kostafey ©   (2007-02-24 02:05) [3]

> _declspec

Все верно она должна быть.


> Как я понимаю проблема в передаче динамического массива
> с делфи в библиотеку

Тоже верно.

Вообще когда у меня возникла проблема передачи массива из С++ dll в Delphi exe мне пришлось копировать его содержимое, а
не работать с укзателями, предоставленными из dll.
Решение некрасивое, но работало без сбоев.
Как мне кажется, таких вещей стоит избегать и передавать либо простые типы или хотя бы массивы фиксированной длины.

Наверное можно и по-другому...



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

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.055 c
15-1171983453
Gin2
2007-02-20 17:57
2007.03.18
Виндовая писалка


2-1172382922
Novichok_New
2007-02-25 08:55
2007.03.18
Application.CreateForm


15-1171988437
vasIZmax
2007-02-20 19:20
2007.03.18
Вот давно хотел спросить...


15-1172050398
DVM
2007-02-21 12:33
2007.03.18
Вопрос знатокам FreeBSD


15-1171746781
Цукор5
2007-02-18 00:13
2007.03.18
мать(440BX) с винтом на 40G...