Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Корень уравнения методом деления отрезка пополам https://www.cyberforum.ru/ delphi-beginners/ thread1264177.html
Здравствуйте. Помогите пожалуйста с задачей: Дано действительное положительное число (эпсилон). Методом деления отрезка пополам найти приближенное значение корня уравнения: ...
Delphi Укороченая запись в массив
Требуется записать числа в массив по примеру ниже, способ mas2 неработает. Неужто тока перечислять? var Form1: TForm1; mas: array of Integer = (1, 2, 3, 4); //работает mas2: array of...
Парсинг Location в заголовках Delphi
begin Http:=TIdHTTP.Create; Http.Get('LINK'); if pos('Location: ',http.Request.RawHeaders.Text)<>0 then begin URL:=Pars('Location: ',http.Request.RawHeaders.Text,''); end; Showmessage(URL);...
Delphi Как TTimer только в микросекундах Здравствуйте. Подскажите наподобие TTimer только в микросекундах. Как такое сделать или есть уже готовые решения? https://www.cyberforum.ru/ delphi-beginners/ thread1264067.html
Delphi StringGrid и средняя скорость https://www.cyberforum.ru/ delphi-beginners/ thread1263926.html
Задание гласит: В массиве Time(20) хранится результат (в секундах) забега на 100 метров для 20 спортсменов. Определить среднюю скорость бега для каждого из спортсменов. Форма прилагается, чтоб...
Delphi Задача про стрелки часов
Добрый день. Помогите, пожалуйста, с задачей. Даны целые числа m, n (0<m<=12, 0<=n<60), указывающие момент времени: «m часов, n минут». Определить наименьшее время (число полных минут), которое...
Воспроизведение звуковых файлов (wav или mp3) Delphi
Ребят помогите разобраться с воспроизведением звуковых файлов, wav или mp3, это нужно чтобы в программе были звуковые уведомления. Пробовал делать так: uses mmsystem; // PLAY...
Delphi Ошибка: Declaration of class Tform1 is missing or incorrect Как исправить? Declaration of class Tform1 is missing or incorrect https://www.cyberforum.ru/ delphi-beginners/ thread1263600.html
Delphi Delphi7 и экспорт в Эксель https://www.cyberforum.ru/ delphi-beginners/ thread1263588.html
Добрый день, Уважаемые разработчики! Прошу Вашей помощи. У меня 3-а вопроса. Ниже программка, которая делает экспорт их Делфи в Эксель, но: 1) как сделать так, чтобы программа не спрашивала КУДА...
Delphi Списки (сортировка, добавление, удаление) Вообщем мне нужно к этой работе добавить дополнительное задание: "Удалить из этого списка, элемент, который расположен после заданного элемента е." Тоесть, удалить елемент который идет после... https://www.cyberforum.ru/ delphi-beginners/ thread1263573.html
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
0

Функция в DLL, Invalid pointer operation

28.09.2014, 13:16. Показов 921. Ответов 5
Метки (Все метки)

Всем доброго дня!
Есть такая проблема: имеется dll с тремя функциями, которые будут экспортироваться:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
library funcLib;
uses
  SysUtils,
  Classes;
 
{$R *.res}
//zamenit' pervuju bukvu kazhdogo slova
function firstLet(str:string):string;stdcall;
var
  i:Integer;
  strLength:integer;
begin
  strLength:=Length(str);
  SetLength(str, strLength);
   //esli pervoe slovo s malekoi bukvu -- zamenim ego
   if (Ord(str[1]) >= 97) and (Ord(str[1]) <= 122) then
         str[1]:=Chr((Ord(str[1]))-32);
   //poisk pozicii nachala kazhdogoslova
   for i:=2 to strLength do
   begin
       if str[i] = ' ' then
       begin
         if (Ord(str[i+1]) >= 97) and (Ord(str[i+1]) <= 122) then
         str[i+1]:=Chr(Ord(str[i+1])-32);
       end;
    end;
   firstLet:=str;
end;
//iz propisnux v strochnue
function Atoa(str:string):string;stdcall;
var
  i:Integer;
  strLength:integer;
begin
  strLength:=Length(str);
  SetLength(str, strLength);
  for i:=0 to strLength do
  begin
    if (Ord(str[i]) >= 65) and (Ord(str[i]) <= 90) then
    str[i]:=Chr(Ord(str[i])+32);
  end;
  Atoa:=str;
end;
//vse v strochnue
function getCaps(str:string):string;stdcall;
var
  i:Integer;
  strLength:integer;
begin
  strLength:=Length(str);
  SetLength(str, strLength);
  for i:=1 to strLength do
  begin
    if (Ord(str[i]) >= 97) and (Ord(str[i]) <= 122) then
         str[i]:=Chr((Ord(str[i]))-32);
  end;
  getCaps:=str;
end;
exports
firstLet,
Atoa,
getCaps;
 
begin
end.
Задачи функций таковы:
1) Преобразование всех букв символьной строки в строчные.
2) Преобразование всех первых букв слов, входящих в состав символьной строки, в прописные.
3) Преобразование всех букв символьной строки в прописные.

И есть программа, которая импортирует эти функции:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    edtbefore1: TEdit;
    edtbefore2: TEdit;
    edtbefore3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    edtafter1: TEdit;
    edtafter2: TEdit;
    edtafter3: TEdit;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
 
 
implementation
 
{$R *.dfm}
//Import funkciy
function  Atoa(str:string):string;stdcall; external 'funcLib.dll';
function  firstLet(str:string):string;stdcall; external 'funcLib.dll';
function  getCaps(str:string):string;stdcall; external 'funcLib.dll';
 
procedure TForm1.btn1Click(Sender: TObject);
var
  str:string;
begin
  str:=edtbefore1.Text;
  edtafter1.Text:=Atoa(str);
end;
 
procedure TForm1.btn2Click(Sender: TObject);
var
  str:string;
begin
  str:=edtbefore2.Text;
  edtafter2.Text:=firstLet(str);
end;
 
procedure TForm1.btn3Click(Sender: TObject);
var
  str:string;
begin
  str:=edtbefore3.Text;
  edtafter3.Text:=getCaps(str);
end;
 
end.
По нажатию кнопок (btn1,btn2,btn3) переменной str присваивается текстовое значение из эдита, производится трансформация и результат выводится в другой эдит.
Код функций проверен отдельно, все работает отлично. Но в этой программе по нажатию на кнопку, вылазит ошибка "Invalid pointer operation". НО когда я нажимаю на "Ок" функция нормально выполняется, все трансформируется и выводится в эдит! То есть, все нормально работает, но появляется эта ошибка!
Что это такое и как это исправить?
Заранее спасибо за ваши подсказки!

З.Ы: поиск юзал, гугл юзал, для себя ничего полезного не нашел. Вроде и длину строки вначале задал, и за пределы массива вылазить не должно. Что еще делать я не знаю

Вернуться к обсуждению:
Функция в DLL, Invalid pointer operation
0
Лучшие ответы (1)
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2014, 13:16
Готовые ответы и решения:

invalid pointer operation
function MathFunc.MyMath(m:integer):integer; var i1,i,n,i2,i3:integer; b,g,a:mas;...

Invalid pointer operation
Доброго времени суток! Есть программа тестирования, которая работает с двумя типами вопросов : -...

Invalid pointer operation
Создал программу для поиска седловых точек в матрице (если элемент матрицы максимален в своей...

Ошибка: Invalid pointer operation
procedure TForm1.Button2Click(Sender: TObject); var i, n : Integer; Point : array of...

5
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.