Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Помогите с DLL   Найти похожие ветки 

 
c0pYc@t   (2002-07-11 10:05) [0]

Пытаюсь разобраться с DLL.
Когда просто привязываешь DLL к проге все ОК!
Но при динамическом подключении вроде тоже все в порядке, но при освобождении памяти от DLL -ERROR "Программа выполнила недопустимую опер и буд закр"
Помогите кто может вчем дело?

Код DLL
library mydll;

uses SysUtils, Classes;

{Определяем функцию как stdcall}
function GetSimpleText(LangRus: Boolean): PChar; stdcall;
begin
{В зависимости от LangRus возвращаем русскую (True) либо английскую (False) фразу}
if LangRus then
Result := PChar("Здравствуй, мир!")
else
Result := PChar("Hello, world!");
end;

{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports GetSimpleText;
begin
end.


Код Project

unit unitdll2;

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;
GetSimpleText: function(LangRus: Boolean): PChar;
LibHandle: THandle;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
{"Чистим" адрес функции от "грязи"}
@GetSimpleText := nil;
{Пытаемся загрузить библиотеку}
LibHandle := LoadLibrary("MYDLL.DLL");
{Если все OK}
if LibHandle >= 32 then begin
{...то пытаемся получить адрес функции в библиотеке}
@GetSimpleText := GetProcAddress(LibHandle,"GetSimpleText");
{Если и здесь все OK}
if @GetSimpleText <> nil then
{...то вызываем эту функцию и показываем результат}
ShowMessage(StrPas(GetSimpleText(True)));
ShowMessage(StrPas(GetSimpleText(False)));
end;
{И не забываем освободить память и выгрузить DLL}
FreeLibrary(LibHandle);
end;
end.


 
Digitman   (2002-07-11 10:55) [1]

var
...
GetSimpleText: function(LangRus: Boolean): PChar; stdcall


 
c0pYc@t   (2002-07-11 13:15) [2]

Digitman спасибо за помощь



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

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.004 c
7-70931
ask
2002-04-30 14:26
2002.07.22
код клавиши Tab


8-70830
Yaro
2002-03-10 09:05
2002.07.22
GDI+ и антиалайзинг


1-70792
ize
2002-07-10 11:08
2002.07.22
Выравнивание текста в ячейках StringGrid


3-70664
MikeGavrilov
2002-07-02 12:42
2002.07.22
Помогите с FreeReport ом


14-70869
Странный Прохожий
2002-06-24 12:56
2002.07.22
Кактусы





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