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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2009, 00:44   #1
Alex Logos
Новичок
Джуниор
 
Регистрация: 27.02.2009
Сообщений: 2
По умолчанию Работа с dll

Хочу наладить рАботу подпрограммы, которая находится в длл, для рАботы с данными типа String. На входе и выходе подпрограммы дожна быть строка. Как лучше это сделать? Или лучше конвертировать в PChar?

Последний раз редактировалось mihali4; 27.02.2009 в 01:49. Причина: Полная безграмотность
Alex Logos вне форума Ответить с цитированием
Старый 27.02.2009, 00:45   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Где код DLL?
mihali4 вне форума Ответить с цитированием
Старый 27.02.2009, 07:08   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

лучше так не делать, обычно функцие передается указатель на буфер, который заполняется значениями, пример GetWindowText().
Хотя можно подключить ShareMem и вроде даже должно работать.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 27.02.2009, 10:30   #4
Alex Logos
Новичок
Джуниор
 
Регистрация: 27.02.2009
Сообщений: 2
По умолчанию

Длл конечно дубовая, мне просто надо отработать этот метод. В реале есть несколько крупных процедур обработки текста, которые налажены и нормально работают. Задача - вывести их за пределы тела программы - мне уже трудно ориентироваться.


library Project2;

uses
SysUtils,
Classes,
ShareMem;

function Rjad(st:String):String; stdcall;
var s:string;
begin
if Length(st)>4 then
begin
try
s:=copy(st,1,(Length(st)-3));
except Result:='1';
Result:=s;
end
else Result:='Малая длина строки';
end;

exports
Rjad INDEX 1 NAME 'Rd';

begin
end.
в Uses ShareMem

обьявляю в var
Rs: function(st:String):String; stdcall;

Потом пишу не менее дубовый обработчик
по кнопе:
procedure TForm1.Button2Click(Sender: TObject);
var Result1:String;
begin
@Rs := nil;
LibHandle := LoadLibrary('Project2.dll');
if LibHandle >= 32 then
begin
@Rs := GetProcAddress(LibHandle, 'Rd');
if @MyFunc <> nil then
begin
Result1 := Rs(Edit3.Text);
FreeLibrary(LibHandle);
end
else ShowMessage('лажа');
Edit5.Text := Result1;
end;
end;

в результате получаю "лажу" і invalid pointer operation
Alex Logos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с DLL Lazo Помощь студентам 4 21.02.2009 06:14
Работа с DLL StartMis Общие вопросы Delphi 4 09.02.2009 12:05
Работа с DLL Maks1978 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 18.09.2008 16:55
Работа с переменными в DLL Zeraim Общие вопросы Delphi 3 14.05.2008 23:10
Работа из dll формы mauar Общие вопросы Delphi 3 05.05.2008 11:40