Главная страница
    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.063 c
1-1169299884
hypnotize
2007-01-20 16:31
2007.03.18
Image поверх Image


15-1171831724
Leonid Troyanovsky
2007-02-18 23:48
2007.03.18
Таракан


15-1172354916
Kair+
2007-02-25 01:08
2007.03.18
MySQL + DateTime


11-1150512041
parovoZZ
2006-06-17 06:40
2007.03.18
demomodalvcl2koldll - вовсе и не модал


6-1159770522
Виктор 5
2006-10-02 10:28
2007.03.18
не работает InternetSetFilePointer





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