[在线求教]---我照着猛料里的例子写的一个dll,freelibrary时候出错,大侠看看~解决立即给分!!
想学着写dll插件,代码如下,最简单的一个动态调用dll例子,但是老出错,大侠看看指点一下小弟~~~
//======================================================
窗体运行代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TPluginDescribe = procedure(var Desc: string); stdcall;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Description: string;
LibHandle: Integer;
DescribeProc: TPluginDescribe;
begin
LibHandle := LoadLibrary(Pchar(ExtractFilePath(Application.ExeName)+'plugin.dll'));
if LibHandle <> 0 then
begin
DescribeProc := GetProcAddress(LibHandle,'DescribePlugin');
if Assigned(DescribeProc) then
begin
DescribeProc(Description);
freelibrary(libHandle);
end;
end;
end;
end.
//=====================================================================
dll代码如下:
library plugin;
uses
SysUtils,
Classes;
{$R *.res}
procedure DescribePlugin(var Desc: string);stdcall;
begin
Desc := '1111111111111111111111111111111';
end;
exports
DescribePlugin;
begin
end.
问题点数:100、回复次数:8Top
1 楼getit911(Windows转Linux中)回复于 2005-02-03 10:02:19 得分 10
不要用string,用pcharTop
2 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:09:35 得分 0
为什么不要用string呢?
用pchar可以 var 传参数嘛?Top
3 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:10:59 得分 0
可是猛料里用string的啊,它这么写错了? 还是要注意其他问题呢?
小弟刚接触dll,大侠请明示^_^Top
4 楼Kevin_Lmx(繁华阅尽)回复于 2005-02-03 10:16:12 得分 90
用String的话,在EXE和Dll中都uses ShareMem(放在所有引用的单元的最前面)。一般的话,不要直接使用String类型,从兼容性和安全性考虑,还是用指针PChar好。
PS:超级猛料也不过是从网上收集的资料,难免会有问题的……Top
5 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:19:44 得分 0
谢谢 Kevin_Lmx(繁华阅尽) 和 getit911(Windows转Linux中) 大侠^_^
pchar小弟也用的不熟,所以想偷懒用string了,呵呵,看来要多加练习哈
大家还有什么需要开发dll插件的资料或者需要注意的多贴点哈,我待会就揭帖^_^Top
6 楼Kevin_Lmx(繁华阅尽)回复于 2005-02-03 10:20:25 得分 0
参看此处:http://blog.csdn.net/agui(2004年12月15日文章)Top
7 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 11:26:36 得分 0
揭帖,谢谢各位大侠指点^_^ !Top
8 楼warmworm(warmworm)回复于 2005-02-04 15:43:38 得分 0
动态分配string
使用的是延后分配方式
string s, t;
t := 'ttt';
s := t;这时指向是相同的,并没有进行分配
s := s + 't';s重新分配
所以一定要改动一下sTop




