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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по DLL. Ошибка при вызове процедуры 
:(
    Опции темы
Энди
Дата 3.6.2005, 10:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите кто-нибудь, что я делаю не так?
Суть проблемы в следующем:
Есть DLL написанная на фортране (PowerStation). Для примера, совершенно простенькая процедура суммирования двух значений.
Исходный код:
Код

 SUBROUTINE abc(a,b,c)
      !MS$ATTRIBUTES DLLEXPORT :: abc
      REAL*4 a,b,c
       c=a+b
      RETURN
      END

Далее пытаюсь эту DLL подключить к дельфийной программе. И затем вызвать процедуру.
Исходный код:
Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 procedure abc(a,b:single;var c:single);stdcall; external 'abc.dll';
{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
var arr:myarr;
    n:longint;
    res:single;
begin
 n:=10;
 abc(11,5,res);
 showmessage(inttostr(n));
end;

end.

Выдается ошибка:
"Точка входа в процедуру abc не найдена в библиотеке DLL abc.dll"

При этом точно такая же процедура написанная на Delphi и упиханная в DLL совершенно нормально работает. Что все-таки не так? Может кто сталкивался с подобным...
Заранее благодарен.

Это сообщение отредактировал(а) Girder - 3.6.2005, 10:42
  Вверх
p0s0l
Дата 3.6.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Выполни tdump abc.dll -ee чтобы посмотреть имена экспортируемых функций DLL, посмотри, есть ли там твоя фортрановская функция...
Может имя экспортируемой функции "приукрашается" компилятором фортрана ?




--------------------
С уважением, г-н Посол.
PM   Вверх
Энди
Дата 3.6.2005, 13:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(p0s0l @ 3.6.2005, 12:12)
Выполни tdump abc.dll -ee чтобы посмотреть имена экспортируемых функций DLL, посмотри, есть ли там твоя фортрановская функция...
Может имя экспортируемой функции "приукрашается" компилятором фортрана ?

Спасибо за совет.
И в самом деле имя "приукрашивается"...причем весьма странным образом.
Вместо названия процедуры abc оно стало _abc@12
А в дельфях такое имя непозволительно...теперь, соответственно, возник вопрос, что же сделать в фортрановской части, чтобы имя стало нормальным?
Может кто-то знает...
  Вверх
Girder
Дата 3.6.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



LoadLibrary,GetProcAddress,FreeLibrary


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Энди
Дата 3.6.2005, 14:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Все, разобрался с проблемой.
Ошибка была в фортрановском коде. Вот решение, может кому пригодится...

SUBROUTINE abc(a,b,c)
!MS$ATTRIBUTES DLLEXPORT :: abc
!MS$ ATTRIBUTES ALIAS:'abc' :: abc
!MS$ attributes stdcall :: abc
!MS$ attributes reference :: c
REAL*4 a,b,c
c=a+b
RETURN
END

Всем спасибо, кто откликнулся... smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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