2014-09-23 141 views
0

我正在使用Websphere MQ。我需要将特定的JAR文件转换为DLL。 Here是WMQ客户端的JARS集合。 Here是集合的JAR分析器文件,其中列出了各种传入和传出的依赖关系。当jar文件具有各种传出依赖关系时,如何使用IKVMC将特定的JAR文件转换为DLL?

我要转换的文件是com.ibm.mq.jar它具有以下传出的依赖 -

com.ibm.mq.commonservice.jar 
com.ibm.mq.headers.jar 
com.ibm.mq.jmqi.jar 

问题是我不知道是什么命令,在命令提示符下传递给罐子转换,而不会丢失任何的类。

基本上,我需要访问属于com.ibm.mq.jar的MQMessage和MQMD,但是当我自己转换它时,那些特定的类不会被导入。

我看了another similar StackOverflow Question,但主要区别在于依赖关系是循环的。

例如,com.ibm.mq.headers.jar取决于com.ibm.mq.jmqi.jar,反之亦然。

+0

您需要做什么转换JAR文件? MQ有.NET客户端。 – Calanais 2014-09-23 08:14:57

+0

我需要连接到MQ,而无需安装客户端。不要问我为什么。我的老板让我去做。我做到了。现在他们想要功能。 – doodla 2014-09-23 08:38:53

+0

我很欣赏客户端安装在机器上放置了大量的资料;但是您需要在程序运行的机器上复制一些客户端库.net或JAR(转换或不转换)。 请记住,IBM服务不会扩展到任何转换的JAR。 – Calanais 2014-09-23 09:01:11

回答

2

我不知道为什么你不会读我给的MQ链接。

(1)创建一个纯粹的 '.NET托管' MQ应用

int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING; 
Hashtable qMgrProp = new Hashtable(); 
qMgrProp.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); /* very important */ 
qMgrProp.Add(MQC.HOST_NAME_PROPERTY, "10.10.10.10"); 
qMgrProp.Add(MQC.CHANNEL_PROPERTY, "TEST.CHL"); 
qMgrProp.Add(MQC.PORT_PROPERTY, 1414); 
qMgrProp.Add(MQC.USER_ID_PROPERTY, "myUserID"); 

try 
{ 
    MQQueueManager _qMgr = new MQQueueManager("MQA1", qMgrProp); 

    MQQueue queue = _qMgr.AccessQueue("TEST.Q", openOptions, null, null, null); 

    /* Do whatever you want to do */ 

    queue.Close(); 
    _qMgr.Disconnect(); 
} 
catch (MQException mqex) 
{ 
    System.Console.Out.WriteLine("MQTest01 cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode); 
} 

(2)编译它。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /t:exe /r:System.dll /r:"C:\Program Files (x86)\IBM\WebSphere MQ\bin\amqmdnet.dll" /out:bin\Release\Test.exe Test.cs Properties\AssemblyInfo.cs 

(3)创建 “Test.config” 文件(去与将Test.exe),其中将Test.exe存储

<configuration> 
    <appSettings> 
    <add key="NMQ_MQ_LIB" value="managed"/> 
    </appSettings> 
</configuration> 

(4)3个复制文件到您的目标PC:测试.exe,Test.config和amqmdnet.dll,然后运行它。您可能需要更新PATH环境变量以指向amqmdnet.dll所在的目录。这通常不是必需的,但有时Windows会变得挑剔。

+0

谢谢。在发布之前,我对.NET Managed应用程序一无所知。 – doodla 2014-09-25 05:26:28

+0

这就是为什么我给你的链接。 – Roger 2014-09-26 20:29:45

0

谈论让你的生活比需要的更难。让您的应用程序成为“.NET管理”应用程序,然后您需要的只是名为amqmdnet.dll的MQ dll(由IBM提供,它包含您需要的一切)。

因此,您可以在不完全安装MQ的情况下运行.NET应用程序。当然,在您的应用程序中部署amqmdnet.dll文件不受IBM支持,但您尝试执行的复杂安装程序也不是。

+0

未安装MQ客户端,amqmdnet.dll无法正常工作。你的第二段对我来说毫无意义。你想在那里说什么? – doodla 2014-09-23 18:30:37

+0

是的,它的确如此。请阅读手册:http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q029450_.htm – Roger 2014-09-24 00:14:02

+0

据我所知,amqmdnet.dll doesn没有安装MQ客户端就无法正常工作。如果你知道一种方法使其工作,请让我知道。我不在乎它是否不受支持。 OMG。 – doodla 2014-09-24 05:35:14