Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспорт-импорт класса в dll 
:(
    Опции темы
chemodan
Дата 21.3.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.3.2007

Репутация: нет
Всего: нет



Пусть есть такая библиотека:
Код

library Project1;

uses
  SysUtils,
  Classes,
  Windows;

type
        itPoint3f = interface
                procedure Normalize();
                procedure SetValue(x, y, z:real);
                procedure output();
        end;

        tPoint3f=class(TInterfacedObject, itPoint3f)
                x,y,z:real;
                procedure Normalize();
                procedure SetValue(x, y, z:real);
                procedure output();
                Destructor Destroy();override;
        end;

procedure tPoint3f.SetValue;
begin
        self.x:=x;
        self.y:=y;
        self.z:=z;
end;

Destructor tPoint3f.Destroy();
begin
end;

procedure tPoint3f.Normalize;
var
        t:real;
begin
        t:=sqrt(x*x+y*y+z*z);
        x:=x/t;
        y:=y/t;
        z:=z/t;
end;

procedure tPoint3f.output;
begin
        writeln(x:-1:4,' ', y:-1:4, ' ', z:-1:4);
end;

function Get_itPoint3f(out intf: itPoint3f): boolean;
begin
        Result := True;
        try
                intf := tPoint3f.Create;
        except
                Result := False;
                intf := nil;
        end;
end;

function Del_itPoint3f(out intf: itPoint3f): boolean;
begin
        tPoint3f(intf).Free;
        result:=true;
end;

exports
        Get_itPoint3f, Del_itPoint3f;

begin
end.


Вот так в Delphi гружу:
Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
        itPoint3f = interface
                procedure Normalize();
                procedure SetValue(x, y, z:real);
                procedure output();
        end;


procedure Get_itPoint3f(out intf: itPoint3f); stdcall;external 'Project1.dll' name 'Get_itPoint3f';
function Del_itPoint3f(out intf: itPoint3f): boolean;stdcall;external 'Project1.dll' name 'Del_itPoint3f';

procedure main;
var
        t:itPoint3f;
begin
        Get_itPoint3f(t);
        t.SetValue(1,1,1);
        t.Normalize();
        t.output();

        Del_itPoint3f(t);
        readln;
end;

begin
        { TODO -oUser -cConsole Main : Insert code here }
        main;
end.

Вопросы:
1) Правильно ли удаляется объект в Del_itPoint3f ?
2) После readln возникает исключение "access violation at 0x0000000000 ". Почему?
3) Как такой класс импортировать в С++?

Заранее признетелен..

PM MAIL   Вверх
Alexeis
Дата 21.3.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(chemodan @  21.3.2007,  17:55 Найти цитируемый пост)
2) После readln возникает исключение "access violation at 0x0000000000 ". Почему?

chemodan  попробуй отладчиком.
Цитата(chemodan @  21.3.2007,  17:55 Найти цитируемый пост)
3) Как такой класс импортировать в С++?

Никак если это не COM объект.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 21.3.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Интерфейсы не нужно удалять.
Нужно просто присвоить ему nil.
Сборщик сам его убъёт автоматически.

Добавлено @ 18:56 
Вместо
Del_itPoint3f(t);
нужно
  t := nil;
PM MAIL   Вверх
MetalFan
Дата 21.3.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



эт как это через out параметр передача в длл осуществляется?! бред. RTFM


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.