Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 03:27   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Динамические библиотеки

Как создать мою программу через динамическую библиотеку. Говорят что можно испоьзовать массив символов.
procedure TForm1.Button1Click(Sender: TObject);
Function Tekst(n,k:integer):integer;
var i,h:integer;
begin
if n > 0 then
begin
for i:=1 to 500 do
h := Image1.Canvas.TextHeight('H');
Image1.Canvas.TextOut(0, (k-n)*h*5,IntToStr(k-n+1));
Image1.Canvas.TextOut(0, (k-n)*h*5+h,'Как это было:');
Image1.Canvas.TextOut(0, (k-n)*h*5+2*h,'У попа была собака- он ее любил.');
Image1.Canvas.TextOut(0, (k-n)*h*5+3*h,'Она съела кусок мяса- он её убил.');
Image1.Canvas.TextOut(0, (k-n)*h*5+4*h,'Убил и закопал на могиле написал:');
Image1.Canvas.Font.Size:=Image1.Can vas.Font.Size*2;
end;
end;
var n,h,k:integer;
begin
Try
k := strtoint(Edit1.Text);
Except
exit;
end;
n:=k;
Image1.Canvas.Font.Assign(Font);
Image1.Canvas.Brush.Color := Color;
Image1.Canvas.Brush.Style := bsSolid;
h := Image1.Canvas.TextHeight('H');
Image1.Height:=h*n*5;
Image1.Canvas.FillRect(Rect(0,0,Ima ge1.Width, Image1.Height));
For n:=k DownTo 0 do Tekst(n,k);
end;
end.

end.
Ericnex вне форума Ответить с цитированием
Старый 10.04.2011, 21:14   #2
F1Book
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 10
По умолчанию

Столкнулся также с проблемой динамических библиотек. Причем на самом первом простом этапе. Итак исходная dll:
PHP код:
library MyDll;
uses
  SysUtils
,
  
Classes,

function 
MassNil(a:integer):integerstdcall;
var 
i:integer;
begin
   Result
:=a+100;
end;

exports MassNil;

begin

end

Программа вызывающая ее:

PHP код:
var
  
Form1TForm1;
  
MassNil: function(a:integer):integer;
  
LibHandleTHandle;
  
fd:integer 1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(SenderTObject);

begin
  
{"Чистим" адрес функции от "грязи"}
  @
MassNil := nil;
  {
Пытаемся загрузить библиотеку}
  
LibHandle := LoadLibrary('MYDLL.DLL');
  {
Если все OK}
  if 
LibHandle >= 32 then begin
    
{...то пытаемся получить адрес функции в библиотеке}
    @
MassNil := GetProcAddress(LibHandle,'MassNil');
    {
Если и здесь все OK}
    if @
MassNil <> nil then
      
{...то вызываем эту функцию и показываем результат}
      
fd:=MassNil(fd);
      
ShowMessage('Библиотека загружена'+intToStr(fd));
  
end;
  {
И не забываем освободить память и выгрузить DLL}
  
FreeLibrary(LibHandle);
end
Компилирую, вроде все ок, но результат не возвращает, более того после выгрузки библиотеки выдает ошибку .
В чем может быть трабл? Вроде все просто и не пашет !
F1Book вне форума Ответить с цитированием
Старый 10.04.2011, 23:35   #3
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Соглашения вызова, в вашем случае stdcall, указываются с обоих сторон.
eduard93 вне форума Ответить с цитированием
Старый 14.04.2011, 22:03   #4
F1Book
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от eduard93 Посмотреть сообщение
Соглашения вызова, в вашем случае stdcall, указываются с обоих сторон.
Спасибо помогло . А никто не подскажет как воткнуть dll написанную в Delphi в С++ (Visual Studio 2005). Пробовал проблему решить в лоб - не прокатило, т.е. объявил в С++ как:
PHP код:
#uses 'ИМЯ.dll' 
Ну или ткните меня сообщения, где это обсуждалось - желательно вариант по элегантнее, люблю так сказать "правильный код".... без всяких перекомпиляций. Буду признателен!
F1Book вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ библиотеки STIFFmaster_LP Помощь студентам 2 07.03.2010 18:46
Библиотеки в c++ Яр|/||< (^_^) Общие вопросы C/C++ 1 07.12.2009 14:30
Библиотеки max38934 Общие вопросы Delphi 4 10.05.2009 20:26
Библиотеки С++ SunKnight Свободное общение 4 15.01.2009 17:13