当jar文件具有各种传出依赖项时,如何使用IKVMC将特定JAR文件转换为DLL?

时间:2014-09-23 06:42:49

标签: java dll jar ibm-mq ikvm

我正在使用Websphere MQ。我需要将特定的JAR文件转换为DLL。 Here是来自WMQ客户端的JARS集合。 Here是集合的JAR Analyzer文件,列出了各种传入和传出依赖项。

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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.exe的“Test.config”文件(与Test.exe一起使用)

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

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

答案 1 :(得分:0)

谈论让你的生活比你需要的更困难。使您的应用程序成为“受管理的”#39;应用程序然后您需要的是名为amqmdnet.dll的MQ dll(由IBM提供,它包含您需要的所有内容)。

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