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

Вниз

Помогите с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-70784
Fiend
2002-07-10 09:40
2002.07.22
Service ADO


1-70728
Blondin
2002-07-11 16:22
2002.07.22
TTimer in RunTime


14-70902
Dimaiv
2002-06-24 15:23
2002.07.22
Народ подскажите где можно взять софт для разварота


1-70804
Ulugbek
2002-07-10 10:30
2002.07.22
Про InstallShield.


1-70767
avr555
2002-07-08 18:11
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский