MSMQQueueInfo 的调用问题,有效期一周,一周后无答案便散分(300分)

  • 主题发起人 主题发起人 smsman
  • 开始时间 开始时间
S

smsman

Unregistered / Unconfirmed
GUEST, unregistred user!
在C中MSMQQueueInfo->set_PathName(L".//private$//transmq");
或DELphi MSMQQueueInfo.PathName:='....'
我对MSMQ操作,在主FORM里面这样就可以成功,但是在DLL里面这样调用取报错,封成COM,还是FORM里面调用OK,但是DLL中调用就不行,谁能帮忙解惑。DELPHI的代码如下。另外使用C#和C++Build调用MSMQ,均在DLL调用COM时加载队列时停住。
var
ad: widestring;
MSMQQInfo: Variant;
MSMQMessage2: TMSMQMessage;
MSMQQueue2: TMSMQQueue;
MSMQQueueInfo2: TMSMQQueueInfo;
begin
//ShowMessage('1');
//OleInitialize(nil);
CoInitialize(nil);
MSMQQueueInfo2 := TMSMQQueueInfo.Create(nil);
MSMQMessage2 := TMSMQMessage.Create(nil);
MSMQQueue2 := TMSMQQueue.Create(nil);
MSMQQueueInfo2.PathName := './private$/transmq';
MSMQQueue2.ConnectTo(MSMQQueueInfo2.Open(MQ_SEND_ACCESS, MQ_DENY_NONE));
MSMQMessage2.DefaultInterface.Label_ := 'asf';
ad := 'sdfds';
MSMQMessage2.Body := ad;
MSMQMessage2.Send(MSMQQueue2.DefaultInterface);
MSMQQueue2.close;
 
DLL与WinForm间的区别是前者没有消息循环,可能是这个原因,试试在DLL中构造一个消息循环试试
 
to 轻舞肥羊
这样处理吗?
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
在COM里面加线程处理?不太明白啊。
不过似乎有道理,我干脆在DLL里面创建一个FORM,然后使用这个FORM管理MSMQ试验看看,这样直接使用FORM自身的消息循环。
马上开始做。
 
不知道是否是我的处理方式不对?我在DLL中放入FORM后,MSMQ的aCTIVE控件放在FORM上,然后建立MSMQ队列,仍然失败。报access violation错误。
 
全部在FORM里写
动态加载
试试
 
问题解决!
轻舞肥羊,谢谢。
在COM中使用带消息循环的线程。
 

Similar threads

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