Главная страница
    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.049 c
2-1172308712
Интересующийся
2007-02-24 12:18
2007.03.18
Как узнать день недели для любой даты


2-1172231782
rts111
2007-02-23 14:56
2007.03.18
TWordApplication: Как узнать количество страниц в документе?


2-1172086085
danila_master
2007-02-21 22:28
2007.03.18
PNG в Delphi


9-1145623480
KiberKot
2006-04-21 16:44
2007.03.18
Анимация


15-1172239795
isasa
2007-02-23 17:09
2007.03.18
"Легкий"(для малого офиса) Mail Server





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