DLL 中的问题关于Invalid Pointer Operation 的错误信息(50分)

  • 主题发起人 主题发起人 青铜三代
  • 开始时间 开始时间

青铜三代

Unregistered / Unconfirmed
GUEST, unregistred user!
我在dll中只要是引用 sharemem单元
在结束主程序就报Invalid Pointer Operation 的错误信息
代码如下:
Application :=App ;
DLLForm := TDLLForm.Create(App);
try
DLLForm.ShowModal ;
finally
DLLForm.Free;
end;
end;
exports
Formshow;
 
不明白你的代碼, 能詳細說明嗎?
 
to :alextsui
简单说
在调dll的程序中 引用 sharemem单元
在关闭程序时报错
Invalid Pointer Operation 的错误信息
能帮忙解决吗
 
GetMen
FreeMen
 
其實ShareMem不需要引用亦可以調用裡面的function的, 所以你沒有必要引用ShareMem unit.
 
to :alextsui
我并不是想用sharemem里的函数
我只想传递长字符串
举个例子
比如说
我想编个程序 我想把程序中每个窗体都编成DLL
而在这些DLL窗体中需要用到数据库控件 (ADOtable)
所以我在主程序中调这些 DLL窗体时
需要传已连接好的(ADOtable [ADOtable的Connectstring 已附值])
我要是不引用 sharemem 传进来的
ADOtable 就不起作用
据个例子说
我dll窗体中有DataSouce1,DBGird1 ,
DBGird1.DataSouce:=DataSouce1;
ADOtable1.close;
ADOtable1.tablename := '表名';
DataSouce1.dataset :=ADOtable1(ADOtable1是从主程序中传进来已连接好的ADOtable)
ADOtable1.open ;
但是DBGird1里没有数据
要是引用sheremem
DBGird1里有数据
////////
但是在调dll的程序中 引用 sharemem单元
在关闭程序时报错
Invalid Pointer Operation 的错误信息
 
在Dll中显示模式窗体
function ShowDllFrm(AHandle;THandle):boolean;
var
DllFrm:TDllFrm;
begin
Application.Handle:=Ahandle;
DllFrm:=TDllFrm.Create(Application);
try
.....
end;
 
在调dll的程序中 引用 sharemem单元
在关闭程序时报错
Invalid Pointer Operation 的错误信息
不是要显示DLL中的模式窗体
 
谁要是帮我解决了

我答应他我今后40天每天加的5分给他
 
剛才離開了公司.
你的目的只是想實現在DLL form裡面顯示adoTable的內容, 你可以在調用DLL form的時候,
在所有DLL form裡面建立一個procedure CreateForm, 把需要傳入的參數在主程式傳入就
可以實現了.
 
你的方法不行
 
Exp: constructor Create(Owner: TComponent;
var adoTableName: String); reintroduce; overload;
請把你想要的參數自己設置好, 因為我所有的項目都是這樣構造出來的,
現在只個提示你, 因為大家所做的內容畢竟有所不同.

 
我想要传的是adoTable
并不是表名
因为我希望在主程序中传进DLL中以连接好的adoTable
adoTable.connectstring已经设好的
adoTable在连接时最费时间
 
试一下:
var
oldApp: TApplication
begin
OldApp := Application; //保存
Application :=App ;
DLLForm := TDLLForm.Create(App);
try
DLLForm.ShowModal ;
finally
DLLForm.Free;
Application := OldApp; //需要恢复原来的Application
end;
end;
 
>_< 你可以修改成Table啊, 我現在的做法是每個form都沒有數據庫控件的,
所有跟數據庫相關的控件都放在DataModule裡面.

constructor Create(Owner: TComponent;
var adoTable: TADOTable); reintroduce; overload;
這樣改可以了吧, 你自己試試, 我只是給你個啟發, 因為不知道你的實際情況啊.
 
to hanyongjian
我知道这个方法 这个方法解决MDI窗体最后
在主窗体结束时调用的方法
把DLL真正的从程序的地址空间剥离
1我的问题是
你可以做个实验
新建一个工程
uses sharemem 单元
然后运行 在关闭程序时报错
Invalid Pointer Operation 的错误信息
你能不能解决
 
我的问题已解决 我终于找到sharemem的原因了
不用给分了
顺便问大家一下 我的分能拿回来吗
怎么拿 提供线索者有分
 
把方法寫出來讓大家分享.
 
sharemem单元必须放到前面
 
后退
顶部