兄弟多呀,DLL也多,BUG多多,请我困死了,就是MM不多(100分)

  • 主题发起人 主题发起人 delphi5988
  • 开始时间 开始时间
D

delphi5988

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把LISTBOX控件的一个变量写到DLL中原后调用,可不知错在那儿,请帮帮我呀,兄弟们
这是代码
可以通过下例代码就是用FORM调用时提示错误,我怀疑还是DLL有问题

//--------------------------------------------------
library Project1;
uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas';

{$R *.res}

exports
mm;
begin

end.
//----------------UNIT1部分------------------------------------

unit Unit1;

interface

uses
StdCtrls,SysUtils;

procedure mm(listbox:Tlistbox);export;

implementation
procedure mm(listbox:Tlistbox);
var
i:integer;
begin
for i:=0 to 1245 do
begin
listbox.Items.Add(inttostr(i));
end;

end;
end.

//-------------- FORM调用部分--------------------------------------------

myunit

interface

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

type
TForm2 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation
procedure mm(listbox:Tlistbox);stdcall;external'project1.dll' name 'mm';



{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
mm(form2.ListBox1);
end;

end.
 
procedure mm(VAR listbox:Tlistbox);export;
 
procedure mm(listbox:Tlistbox);export;stdcall;
 
好像少了stdcall;后果很严重的
呵呵
 
stdcall
这条是什么作用
 
帮帮我把上面的DLL中加入多线程技术,就是多线程写到DLL中,多线程加入,LISTBOX中就可以了,谢谢兄弟们。
 
不知 stdcall 为何物,你是怎么学 dll 的
 
[:D][^]
to qi_jianzhou
说的有意思!
 
std=标准(standard)
call=调用
相当于vc WINAPI
dll要写啊,不然不同用
 
一个参数的函数虽说没有顺序上的混乱情况,但编译DLL时完全可以认为它是通过寄存器传过来的,而且因为高效所以极可能。于是生成的DLL执行代码就通过寄存来寻址listBox。但是这一切在你的主程序中都变了,你在它的声明中加了stdcall;生成的代码从椎栈中寻找。这样的不伦不类 出错了,同是Delphi,你或者 取掉主程序的stdcall 。 或者在DLL中加入stdcall。
加,为了统一;不加,为了高效。
 

Similar threads

后退
顶部