由program改编生成dll时报错!急求!!! ( 积分: 100 )

  • 主题发起人 主题发起人 lzharbor
  • 开始时间 开始时间
L

lzharbor

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把原来的子系统exe文件改编为dll文件,然后由总程序统一调用。在生成dll文件后,测试时报如下错误:‘Fatal Error: cannot create application object in a shared object or library’!各位大侠,帮忙分析什么原因?怎样解决?谢谢!
 
我想把原来的子系统exe文件改编为dll文件,然后由总程序统一调用。在生成dll文件后,测试时报如下错误:‘Fatal Error: cannot create application object in a shared object or library’!各位大侠,帮忙分析什么原因?怎样解决?谢谢!
 
dll和exe差别还是比较大的,不止是program改成library那么简单吧
如Form:需要将应用程序的Handle传入
 
导出什么函数,应该没这么容易,详细谈
 
to xianguo:
是的,由exe 生成dll并非是更改Program那么简单。我的做法是:
1 更改Program 为Library, 并声明导出函数exports;
2 把工程文件中的begin
/end之间的代码删除
3 定义导出函数。function functionName:string:stdcall;函数体有原来的工程文件中的执行部分修改而来。
4 编译生成dll文件。
在调用dll文件时,采用动态调用,首先声明指针变量,加载dll文件。就在此时报上述错误。
请各位大侠共同会诊,指出问题。不胜感激!
 
//有窗口的DLL示例:
function zbHangUp(
const AppHand:THandle;//必须有工程句柄
const ComType:TComType
):Byte stdcall;
begin
Application.Handle:=AppHand;
// DLLProc:=@DLLEntryPoint;
// DLLEntryPoint(DLL_PROCESS_DETACH);
if frmmain=nil then
frmmain:=Tfrmmain.Create(Application);
with frmmaindo
try
result:=9;
aComType.BaudRate:=ComType.BaudRate;
aComType.CopyMode:=ComType.CopyMode ;
aComType.ComPort:=ComType.ComPort ;
aComType.Telephone:=ComType.Telephone;
Hangup;
result:=ReturnVal;
finally
Free;
frmMain:=nil;
end;
end;
exports
zbHangUp;
 
楼上是标准的DLL函数代码么?
 
声明指针变量,加载dll文件,(传指针)
如果用动态数组或指针,必须在DLL之工程文件及调用DLL之工程文件的
INTERFACE的USES子句的第一个单元加:
ShareMem {in Borlndmm.dll},
参见自动生成的DLL说明;
 
学习学习
 
有没有传入Application的指针入Dll中。
最好贴上代码。
 
有个想法,不知道行不行:
新建个DLL工程,然后把现在的MAIN FORM的handle用导出函数提供给客户端调用,客户端把Application的handle传进来
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
831
import
I
I
回复
0
查看
948
import
I
后退
顶部