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

Вниз

Вызов ф-и из DLL   Найти похожие ветки 

 
mmms   (2005-07-04 13:56) [0]

Код ниже, работает, но после выполнения ошибка


library response;

uses
 SysUtils,
 Classes;

{$R *.res}

function az(a: String): String; stdcall; cdecl; export;
begin
  Result := "Ну как?";
end;

exports az;

begin
end.




unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

function az(point: String): String; cdecl; external "response.dll" name "az";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(az("rrr"));
end;

end.


Ошибка: "Invalid pointer operation", объясните, что не так делаю, что возникает такая ошибка? Заранее преогромно благодарен :)


 
Digitman ©   (2005-07-04 13:57) [1]


>  что не так делаю


не читаешь ОГРОМНЫЙ комментарий, добавленный Делфи-средой в твой dll-проект при его автосоздании


 
mmms   (2005-07-04 13:58) [2]

Ошибка т.е. возникает после ShowMessage(az("rrr"));. Верхний код dll, нижний, пример, вызывающий dll.


 
Чапаев ©   (2005-07-04 13:59) [3]

stdcall cdecl -- это как? Export зачем? Посмотри хоть в хелпе...


 
mmms   (2005-07-04 13:59) [4]

набрал dll в тексте, и сразу скомпилировал :) Сейчас прочту.


 
Sergey_Masloff   (2005-07-04 13:59) [5]

1)
>stdcall; cdecl;
Это как это?
2) Когда создаем новый проект DLL внимательно читаем страшную надпись которую система генерит. При непонимании берем словарь и читаем в цикле до полного просветления
{ Important note about DLL memory management: ShareMem must be the


 
Sergey_Masloff   (2005-07-04 14:00) [6]

накинулиь воронье ;-)))))


 
Digitman ©   (2005-07-04 14:00) [7]


> набрал dll в тексте


дилетант)

профи набирают прямо в машкоде !


 
mmms   (2005-07-04 14:10) [8]

Так и не врубился в смысл, делаю
program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1},
 response in "response.dll";

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


Пишет error loading..


 
Digitman ©   (2005-07-04 14:13) [9]


> Так и не врубился


"рубило" заточи


 
Slym ©   (2005-07-04 14:13) [10]

File->New-Other->DLL Wizard!


 
mmms   (2005-07-04 14:20) [11]

Мастера, можно по человечески объяснить, что ей надо для нормальной работы.. Я понимаю кто то не первый десяток лет с этим работает, но я начинаю только, и не понимаю, что надо сделать?

{ Important note about DLL memory management: ShareMem must be the
 first unit in your library"s USES clause AND your project"s (select
 Project-View Source) USES clause if your DLL exports any procedures or
 functions that pass strings as parameters or function results. This
 applies to all strings passed to and from your DLL--even those that
 are nested in records and classes. ShareMem is the interface unit to
 the BORLNDMM.DLL shared memory manager, which must be deployed along
 with your DLL. To avoid using BORLNDMM.DLL, pass string information
 using PChar or ShortString parameters. }


 
Slym ©   (2005-07-04 14:21) [12]

Напасано же
Uses должен начинаться с ShareMem и в DLL и в exe


 
mmms   (2005-07-04 14:26) [13]

Slym ©   (04.07.05 14:21)
Спасибо огромное, сделал, теперь не ругается, но когда приложение закрываю, опять эта же ошибка возникает, а вызов ф-и из dll у меня правильно происходит?


 
Slym ©   (2005-07-04 14:34) [14]

Неправильно...
У тебя определения разные (должны быть одинаковыми)
DLL:
function az(a: String): String; stdcall; cdecl; export;
exe:
function az(point: String): String; cdecl; external "response.dll" name "az";

правильно:
DLL:
function az(a: String): String; stdcall; cdecl; export;
exe:
function az(point: String): String; stdcall; cdecl; external "response.dll" name "az";

зачем тебе cdecl? убери его если не знаеш что это


 
Digitman ©   (2005-07-04 14:36) [15]


> Slym ©   (04.07.05 14:34) [14]


> правильно:
> function az(point: String): String; stdcall; cdecl; external
> "response.dll" name "az";


гонишь !!!


 
begin...end ©   (2005-07-04 14:40) [16]

Странно, почему компилятор вообще пропускает два указания соглашения...


 
mmms   (2005-07-04 14:42) [17]

Slym ©   (04.07.05 14:34)
Спасибо, что не оставляете мои вопросы без ответа :) Убрал, сделал как сказали, ошибка не исчезла, Digitman, подскажите пожалуйста, если знаете, век благодарен буду ;)


 
begin...end ©   (2005-07-04 14:43) [18]

> mmms   (04.07.05 14:42) [17]

И там, и там уберите и stdcall, и cdecl.


 
alex-drob   (2005-07-04 14:44) [19]

ShareMem в exe есть?


 
Digitman ©   (2005-07-04 14:44) [20]


> mmms   (04.07.05 14:42) [17]


> век благодарен буду


но стулья - завтра !)


> подскажите


ты текст комментария перевел ? вник ?


 
Slym ©   (2005-07-04 15:08) [21]

2 Digitman ©
Да гоню (сижу в форуме от того что пар из ущей пошел от работы)... Но мой текст был Copy/Paste и на этот cdecl я не обратил должного внимания



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.018 c
14-1120151731
kaif
2005-06-30 21:15
2005.07.25
Должен ли гурман жарить на тефлоне?


3-1118152582
Val
2005-06-07 17:56
2005.07.25
Comparison of the Enterprise Functionalities...


14-1120122816
Андрей Жук
2005-06-30 13:13
2005.07.25
Сколько участников интернет-форума нужно для замены лампочки?


14-1120466749
Juice
2005-07-04 12:45
2005.07.25
C++ Абстрактность неабстрактоного класса


14-1119841484
Skier
2005-06-27 07:04
2005.07.25
В Крым на машине...





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