自定义dll建议改为:*************************************************************************
library mydll;
uses
SysUtils,
Classes;procedure right(ch:pchar;n:word);stdcall;export;
var temp:string;
begin
temp:=strpas(ch);
if n>=strlen(ch) then exit;
temp:=copy(temp,strlen(ch)-n+1,n);
strpcopy(ch,temp);
end;
{$R *.res}
exports
right name 'myright' ;
begin
end.
调用程序:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
pro=procedure (ch:pchar;i:cardinal);stdcall;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var ch:pchar;
n:integer;
fp:pro;
mo:Thandle;
begin
//ch:=pchar('');?无意义,删去
mo:=loadlibrary('mydll.dll');
if not assigned(mo) then
begin
messagebox(self.Handle ,'load mydll.dll faile!','load',mb_ok+mb_iconwarning);
exit;
end;
fp:=getprocaddress(mo,'myright');
if not assigned(fp) then
begin
freelibrary(mo);
messagebox(self.Handle ,'getproceddrss faile!','getproddress',mb_ok+mb_iconwarning);
exit;
end;
n:=strtoint(edit2.Text);
ch:=strnew(pchar(edit1.text));
ch:=strnew(pchar(edit1.text));//strpcopy(ch,edit1.Text);不对,ch未分配内存 fp(ch,n);
edit3.text:=strpas(ch);
strdispose(ch);
freelibrary(mo);
end
library mydll;
uses
SysUtils,
Classes;procedure right(ch:pchar;n:word);stdcall;export;
var temp:string;
begin
temp:=strpas(ch);
if n>=strlen(ch) then exit;
temp:=copy(temp,strlen(ch)-n+1,n);
strpcopy(ch,temp);
end;
{$R *.res}
exports
right name 'myright' ;
begin
end.
调用程序:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
pro=procedure (ch:pchar;i:cardinal);stdcall;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var ch:pchar;
n:integer;
fp:pro;
mo:Thandle;
begin
//ch:=pchar('');?无意义,删去
mo:=loadlibrary('mydll.dll');
if not assigned(mo) then
begin
messagebox(self.Handle ,'load mydll.dll faile!','load',mb_ok+mb_iconwarning);
exit;
end;
fp:=getprocaddress(mo,'myright');
if not assigned(fp) then
begin
freelibrary(mo);
messagebox(self.Handle ,'getproceddrss faile!','getproddress',mb_ok+mb_iconwarning);
exit;
end;
n:=strtoint(edit2.Text);
ch:=strnew(pchar(edit1.text));
ch:=strnew(pchar(edit1.text));//strpcopy(ch,edit1.Text);不对,ch未分配内存 fp(ch,n);
edit3.text:=strpas(ch);
strdispose(ch);
freelibrary(mo);
end
解决方案 »
- 编一个建筑小游戏
- Socket基本问题
- intraweb和ASP之类的语言相比较综合性能如何?
- 走过路过不要错过,进来看看
- delpi如何操作SQL中的image字段,高手请进!
- 请大家帮帮我,在哪里可以下载Istallshield 5.1 ???????
- 谁能帮我?谁能?
- 大家来说说Borland下一代开发工具Galileo吧,来者有分
- 一条SQL查询语句的应用.请各位看过来
- 如何用CopyMemory的方法从Array of byte中取出String;
- 請問怎麼調用一個可執行文件(D:/data/stcom1.exe) ????
- 请问stdcall和safecall的函数声明是什么意思?
另:在我的电脑上
if not assigned(mo) 有问题,改为if mo=0可以运行。