DLL中使用字符串时的注意事项。

前段时间,我自己写了一个很简单的DLL,就输出一个字符串,静态调用正常,动态调用出错。
到处提问,错在哪里了??
【出错时,程序直接关闭退出,没有任何提示。】

主程序:

 

1 unit loaddllUnit1;
2
3  interface
4
5  uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls;
8
9  type
10 TForm1 = class(TForm)
11 Edit1: TEdit;
12 Button1: TButton;
13 procedure Button1Click(Sender: TObject);
14 private
15 { Private declarations }
16 public
17 { Public declarations }
18 end;
19
20  var
21 Form1: TForm1;
22
23  implementation
24
25  {$R *.dfm}
26
27 // function TESTDLL:string; stdcall; external 'DLL/dll1.dll';
28 procedure TForm1.Button1Click(Sender: TObject);
29 var
30 dll: Cardinal; // THandle;
31 Getppx: function: string;
32 begin
33 dll := LoadLibrary(PChar('DLL\dll1.dll'));
34 if dll > 32 then
35 begin
36 @Getppx := GetProcAddress(dll, 'TESTDLL');
37 if Assigned(@Getppx) then
38 begin
39 Edit1.Text := Getppx;
40 end;
41 FreeLibrary(dll);
42 end;
43 // Edit1.Text:= TESTDLL;
44 end;
45
46 end.

 

 

 DLL部分:

 

1 library dll1;
2
3 uses
4 SysUtils,
5 Classes;
6
7 {$R *.res}
8
9 function TESTDLL:string;stdcall;
10 begin
11 Result:='test.';
12 end;
13
14 exports
15 TESTDLL;
16
17 begin
18 end.
19
20

 

 

 

后来在大富翁论坛提问,无解。

结果看到了其他人提问:

我知道Delphi DLL 中的参数不能是string类型。
我想问,如果DLL中有窗体,在窗体的过程中能否使用string类型和动态数组呢?

如果可以的话,需要注意什么,如果不可以,为什么?!有什么其他的替代方法吗?

 我就回答他:用PChar吧?

 

然后我瞬间崩溃了,把自己的程序的string改成pchar,果然好了…………

人生,就是这样充满着杯具和餐具。。。

posted on 2010-11-30 13:52  Delphi2010_老赵  阅读(2996)  评论(0编辑  收藏  举报

导航