com+组件调用其他类型*.dll的问题(50分)

  • 主题发起人 主题发起人 孤月独明
  • 开始时间 开始时间

孤月独明

Unregistered / Unconfirmed
GUEST, unregistred user!
通讯后台组成部分:CommSvc.exe(采用共享内存的消息机制,后台通道),DTS1.dll,DTSMsg.dll,
DTSMsgS.dll,p2p.ini(配置文件),DTSDLL.pas
com+组件PQueryBalance加入DTSDLL.pas(引入DTS1.dll中向银行发包、收包的方法,其中DTSMsg.dll和
DTSMsgS.dll用于初始化通道,被DTS1.dll调用),PQueryBalance_TLB interface uses DTSDLL.
编写客户端调用组件方法,因为PQueryBalance_TLB uses 了 DTSDLL,所以,把客户端可执行
文件复制到组件工程所在的目录,或者把commsvc.exe等加到客户端文件目录:
1。在组件工程所在目录,regsvr32 PQueryBalance,运行Commsvc.exe,执行客户端,点击按钮,
调用组件方法,初始化通道成功(在CommSvc.exe的Listbox下出现通道信息),发收包成功,结果正确。
2。把组件安装到COM+,运行Commsvc.exe,执行客户端,点击按钮,
调用组件方法,初始化通道失败(在CommSvc.exe的Listbox下出现没通道信息),发包失败。
什么原因???期盼解决,谢过!
 
前几天俺也遇到这个问题
lorderic大虾解答的
把动态库拷到system32目录下
因为com+对象由dllhost加载
在运行期取当前目录实际上不是对象的位置
而是system32
 
但是我并没有显式的调用啊。
因为已把DTSDLL.pas Add File to Object 到组件PQueryBalance了。
unit DTSDLL;
interface
uses SysUtils;
function AppReset(const AppName:shortstring):Integer;stdcall;
function AppState(const AppName:shortstring):Integer;stdcall;
function GetPacket(const AppName:shortstring;var TaskID:Byte;Buf:PChar;Timeout:Integer):Integer;stdcall;
function SendPacket(const AppName:shortstring;var TaskID:Byte;Buf:PChar;Timeout:Integer):Integer;stdcall;
implementation
function AppReset;external 'DTS1.dll';
function AppState;external 'DTS1.dll';
function GetPacket;external 'DTS1.dll';
function SendPacket;external 'DTS1.dll';
end.
至于初始化通道由DTS1.DLL调用DtsMsg.dll和DtsMsgS.dll
unit UQueryBalance;组件单元文件
interface
uses
ActiveX, MtsObj, Mtx, ComObj, PBalance_TLB, StdVcl,classes,Sysutils,Dialogs,DTSDLL;

unit PBalance_TLB;
// ************************************************************************ //
// ************************************************************************ //
//
// Type Lib: C:/Documents and Settings/Administrator/Mydo
cuments/Balance/PQueryBalance.tlb (1)
// IID/LCID: {0341241A-FCD3-40D2-BA7D-910560C3805E}/0
// Helpfile:
// DepndLst:
// (1) v2.0 stdole, (C:/WINNT/system32/stdole2.tlb)
// (2) v4.0 StdVCL, (C:/WINNT/System32/STDVCL40.DLL)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
interface
uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL,DTSDLL;
 
听课。。。。
 
呵呵,问题解决了,诚如沉香屑所说。3ks.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部