Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с DLL. Использование статистической загрузк


Автор: ProgrammistDelphi 22.1.2005, 21:38
Не могу вызвать свою процедуру из DLL файла.
Есть модуль библиотеки DLL

Код
library StrToChr;

uses
 ShareMem,
 SysUtils,
 Classes;

{$R *.res}

function StToChr(ss:String; b:integer):char; stdcall;
var
g: integer;
 Begin
   G:=Ord(ss[b]);  //получаем код символа
   Result:=CHR(G); //получаем символ по его коду
 end;

  Exports //экспортируем процедуру в  DLL
  StToChr;
begin
end.  :qstn

ВЫЗОВ И ЗПРОГРАММЫ

unit DinamilLabrory;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Label1: TLabel;
   Button1: TButton;
   disk: TDriveComboBox;
   procedure Button1Click(Sender: TObject);

 private
   { Private declarations }
 public

   { Public declarations }
 end;

var

 Form1: TForm1;


implementation

{$R *.dfm}

function StToChr(ss:string; b:integer):char; stdcall; External 'StrToChr.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
b: integer;
rez: char;
ss: string;
begin
ss:=Trim(Edit1.Text);
b:=2;
rez:=StToChr(ss,b);
10: disk.Drive:=rez;
end;
end.


Дело не в преобразовании типа, а в вызове функции. Почему ошибка не могу понять. Ошибка тут GoTo10

Автор: FRAGNATIC 22.1.2005, 21:55
а по мойму нуда так
function StToChr(ss:String; b:integer):char; export; stdcall;

Автор: ProgrammistDelphi 23.1.2005, 10:19
Неужели никто не знает? smile

Автор: p0s0l 23.1.2005, 11:25
А что не работает-то ?
Какая ошибка ?
Твой код почти 1 в 1 скопировал, и работает нормально...

Автор: ProgrammistDelphi 23.1.2005, 12:44
p0s0l

Та шут его знает ошибку вызывает и ссылается на строку с присвоением к переменной rez

Автор: p0s0l 23.1.2005, 16:10
Цитата(ProgrammistDelphi @ 23.1.2005, 12:44)
Та шут его знает ошибку вызывает
Издеваешься надо мной ? smile Я уже спросил: какую ошибку выдает ? Можешь написать ?

Если еще не добавлен, то попробуй добавить ShareMem самым первым в uses-часть твоего проекта (.dpr).

Добавлено @ 16:11
PS: привиденный в твоём посте код - это реальный код, или ты для показа на форуме вырезал остальную часть ?

Автор: ProgrammistDelphi 23.1.2005, 16:49
p0s0l

Project xxxx raised exception class EAccesViolation with message '003320C5'.

Process stopped. Use Step or Run to continue.

Что интересно, если убераю последнюю строчку
Код
Disk.Drive:=Rez;

тогда, иногда выдаст ошибку, а иногда нет. Вот я и говорю фигня какая-то. smile

Это и есть реальный код. Просто захотелось вспомнить DLL, а то я усе из модулей да из модулей.

Автор: Unknown_Error 23.1.2005, 16:59
Цитата(ProgrammistDelphi @ 22.1.2005, 21:38)
procedure TForm1.Button1Click(Sender: TObject);
var
b: integer;
rez: char;
ss: string;
begin
ss:=Trim(Edit1.Text);
b:=2;
rez:=StToChr(ss,b);
10: disk.Drive:=rez;
end;
end.

Я не могу понять причем здесь 10:
Наверное кейс тут был, да?

Автор: p0s0l 23.1.2005, 17:16
Ну тогда не знаю...
Скинь мне на мыло (кнопка E-Mail) исходники DLL и проекта (без самих .dll и .exe)...

Автор: ProgrammistDelphi 23.1.2005, 19:00
10 это просто ссылка по тексту в программе этого нет!

Автор: Girder 24.1.2005, 10:39
Код
function StToChr(ss:String; b:integer):char; stdcall;
Begin
if (b>0)and(b<=Length(ss)) then
 Result:=ss[b] else Result:=#0;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)