![]() |
|
#1
|
|||
|
|||
![]() Несколько дней парюсь, чтобы подключить это творение к приложению (хоть консольному, хоть не консольному). Что было в плане доступной литературы- прочитала. Совсем простенькие функции подключаю, а ето не работает никак...
library PrDll; Код:
uses ShareMem, SysUtils, Classes; {$R *.res} function ChangeString(Str:string):string;stdcall; export; var i,k:byte; begin k:=0; for i:=1 to (Length(Str)) do begin if str[i]=(':') then inc(k); if k mod 2=0 then str[i]:=' '; end; for i:=1 to (Length(Str)) do begin if str[i]=' ' then begin Delete (Str,i,1) end; end; end; exports ChangeString; begin end. Последний раз редактировалось Admin, 14.12.2008 в 17:01. |
#2
|
|||
|
|||
![]() угу, а кто для начала будет результат возвращать (через Result или имя функции)?
а какую ошибку пишет и в какой строке? |
#3
|
|||
|
|||
![]() (Application) Запускается, вводишь текст, нажимаешь button, а он выдает:
Project PrFormDll.exe raised exeption class EnvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue. |
#4
|
|||
|
|||
![]() Код:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; StrNew:String[255]; implementation function MyFunc(str:string):string; stdcall; external 'PrDll.dll' name 'ChangeString'; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin StrNew:=Edit1.Text; MyFunc(strNew); Edit2.Text:=StrNew; end; end. |
#5
|
||||
|
||||
![]() Попробуй один из этих вариантов:
В библиотеке убери строку "stdcall" и объяви импортируемую функцию одним из следующих способов, выбери что заработает: Код:
function ChangeString(str:string):string; stdcall; external 'PrDll.dll'; function ChangeString(str:string):string; external 'PrDll.dll'; А если вообще ничего не получится то удали строку "export" Последний раз редактировалось Vayrus, 15.12.2008 в 09:48. |
#6
|
||||
|
||||
![]() Код:
function ChangeString(str:string):string; far; external 'PrDll.dll'; Кнопка "+" - весы в правом верхнем углу сообщения... |
#7
|
|||
|
|||
![]() Код:
unit FormDll; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; StrNew:String[255]; implementation function ChangeString(str:string):string; external 'PrDll.dll' name 'ChangeString' index 1; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x:string; begin x:=edit1.Text; ChangeString (x); ShowMessage(x); end; end. library PrDll; uses ShareMem, SysUtils, Classes; {$R *.res} function ChangeString(Str:string):string; Export; var i,k:byte; begin k:=0; for i:=1 to (Length(Str)) do begin if str[i]=(':') then inc(k); if k mod 2=0 then str[i]:=' '; end; for i:=1 to (Length(Str)) do begin if str[i]=' ' then begin Delete (Str,i,1) end; end; result:=str; end; exports ChangeString Index 1; begin end. |
#8
|
|||
|
|||
![]() Библиотека, похоже, подключилась, только вот функция должна удалять четные двоеточия, а она даром хлеб ест... В консольном приложении работает...
|