|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.02.2009, 00:44 | #1 |
Новичок
Джуниор
Регистрация: 27.02.2009
Сообщений: 2
|
Работа с dll
Хочу наладить рАботу подпрограммы, которая находится в длл, для рАботы с данными типа String. На входе и выходе подпрограммы дожна быть строка. Как лучше это сделать? Или лучше конвертировать в PChar?
Последний раз редактировалось mihali4; 27.02.2009 в 01:49. Причина: Полная безграмотность |
27.02.2009, 00:45 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Где код DLL?
|
27.02.2009, 07:08 | #3 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
лучше так не делать, обычно функцие передается указатель на буфер, который заполняется значениями, пример GetWindowText().
Хотя можно подключить ShareMem и вроде даже должно работать.
Сказал и загрустил от бесспорности своей правоты.
|
27.02.2009, 10:30 | #4 |
Новичок
Джуниор
Регистрация: 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 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с 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 |