作分布式应用时,我想把与网上服务器连接,会话的过程及函数用DLL来表示,于是
新建一个Data Module里面放入 SocketConnection 和 ClientDataSet1. 为了使调用时可以使SocketConnection.connected:=true; 我用了一个过程
procedure SetConnected;
begin
dm.conn.Connected:=true;
end;调用时:
type
Tsetconnected=procedure ; stdcall;
.
.
procedure TForm1.Button1Click(Sender: TObject);
var setconnected:Tsetconnected;
libHandle:Thandle;
begin
libHandle:=loadlibrary('conndata.dll');
@setconnected:=getProcAddress(libHandle,'SetConnected');
setconnected;
end;
但无论在静态调用和动态高用时都会出错:Access violation at address 00000000,Read of address 0000000'请问是什么原因,是datamodule不能放入DLL 还是我的调用有问题,谢谢!
新建一个Data Module里面放入 SocketConnection 和 ClientDataSet1. 为了使调用时可以使SocketConnection.connected:=true; 我用了一个过程
procedure SetConnected;
begin
dm.conn.Connected:=true;
end;调用时:
type
Tsetconnected=procedure ; stdcall;
.
.
procedure TForm1.Button1Click(Sender: TObject);
var setconnected:Tsetconnected;
libHandle:Thandle;
begin
libHandle:=loadlibrary('conndata.dll');
@setconnected:=getProcAddress(libHandle,'SetConnected');
setconnected;
end;
但无论在静态调用和动态高用时都会出错:Access violation at address 00000000,Read of address 0000000'请问是什么原因,是datamodule不能放入DLL 还是我的调用有问题,谢谢!
解决方案 »
- 结构里各个成员的赋值问题
- 如何自定义消息框的位置?、、、
- delphi三层里面如何拦截"在一个非套接字上尝试了一个操作"
- 怎么通过程序锁定EXCEL某个单元格
- 菜鸟,请教大家,如何将adoDataSet里面的数据清空?
- 请问recordcount=0和Query.isEmpty有什么区别?
- 请问如何用程序控制word2000
- 如何用DELPHI开发一个NT的服务程序
- Delphi的TCustomADODataSet.CacheSize属性为何不起作用?(200分)
- 怎样消去弹出菜单的 windwos (1) 这样的后面 (1) 字样???
- 还有一个问题
- ADO的ConnectString怎么样动态设置
因为应用程序在dpr文件中都有
Application.CreateForm(TDm, dm);这样得代码,而dll中不会有。
SetConnected;begin
Application.CreateForm(TDm, dm);
end.
我初始化了还是出现上面的错误提示?
procedure SetConnected;
begin
dm:=Tdm.Create(Application);
dm.conn.Connected:=true;
end;
function SetConnected(Ahandle:Thandle; ACaption: String):longint;
begin
Application.Handle:=Ahandle;
DM:=TDM.Create(application);
Result := Longint(DM);
// dm.Name:=ACaption;
// dm.conn.Connected:=true;
end;调用时
procedure TForm1.Button1Click(Sender: TObject);
begin
libHandle:=loadlibrary('getdata.dll');
@setconnected:=getProcAddress(libHandle,'setconnected');
setconnected(application.Handle,'jjj');调用时还是出现相同的错误信息,用这种方法调用form,使之显示是可以的。
请问问题出在哪里?先谢了!
function SetConnected(Ahandle:Thandle):longint;
begin
Application.Handle:=Ahandle;
DM:=TDM.Create(application);
end;