编了一个DLL , 出错了,诸位帮忙找下原因.(200分)

  • 主题发起人 主题发起人 张剑波
  • 开始时间 开始时间

张剑波

Unregistered / Unconfirmed
GUEST, unregistred user!
照书抄的,密码输入框的DLL
DLL原码如下:
library ppass;

uses
sharemem,Upass in 'Upass.pas' {fm_pass};
exports
getpassword;
{$R *.res}

begin
end.
+++++++++++++++++++++++++++++++++
unit Upass;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;

type
Tfm_pass = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
private
{ Private declarations }
public
{ Public declarations }
end;

var
fm_pass: Tfm_pass;
procedure getpassword(var user:string;var passwd:string);export;
implementation

{$R *.dfm}
procedure getpassword(var user:string;var passwd:string);
begin
fm_pass:=tfm_pass.Create(application);
try
if fm_pass.ShowModal=idok then
begin
user:=fm_pass.edit1.text;
passwd:=fm_pass.edit2.text;
end
else
application.Terminate;
finally
fm_pass.Free;
end;
end;

end.
++++++++++++++++++++++++++++++++++
调用代码如下:
var
Form1: TForm1;
procedure getpassword(var user:string;var passwd:string);far;external'ppass.dll';
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
name,id:string;
begin
getpassword(name,id);
edit1.Text:=name;
edit2.Text:=id;
end;
=============================
调用DLL成功,密码窗体出现,按密码窗体的确认BUTTON,出现错误:
project project1.exe raised exception class
Einvalidpointer with n/message "invalid pointer operation"
 
准备帮你调一下,看到你用string了。先不用string你试试
 
Nizvoo:
sharemem了,不用string,用什么代替好?thanks
 
问题正是如此。。。

刚才是不是你发短消息给我。。。。

我的mail: Nizvoo@etang.com
 
PChar

ShortString 0-255
 
如果有测试的代码留个言或是发个信到我邮箱。
贴出来浪费资源。。。
 
dll里改成shortstring
在:
name,id:shortstring;
begin
getpassword(name,id);//此处编译不通过
请HELP
 
所有的都换成好不好????
留个信箱。。发给你吧。。。。

呵呵~~~~~~~~~~我似乎强你所难~~~~~~~~~~(不留就不留)))))))
 
ok923@163.net
太感谢了
 
已经发送了。
 
小生初学。可不可以也发一个给我呀~!谢。BETTERS@163.com
 
已发。。。
 
万分感谢Nizvoo先生,千分感谢飘摇客先生。
DLL的STRING传递最好不要用,PCHAR挺好。
STRING的传递不单要sharemem,可能在执行目录中加delphimm.dll
 
多人接受答案了。
 
谢。。都好。
 
后退
顶部