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

Вниз

Работа 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.038 c
1-1169462971
Kolan
2007-01-22 13:49
2007.03.18
Как полтзоваться ChartTools компонента TChart


2-1172321193
ishicucu
2007-02-24 15:46
2007.03.18
Печать содержимого TWebbrowser


2-1172486280
tmp
2007-02-26 13:38
2007.03.18
Как загрузить иконку программы в ImageList?


2-1172335456
Gamer
2007-02-24 19:44
2007.03.18
взаимодействие DLL(!) с программой


6-1160120554
SergeySP
2006-10-06 11:42
2007.03.18
Удалить подвисшее соединение.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский