【问题标题】:How do I use IKVMC to convert a specific JAR file to DLL when the jar file has various outgoing dependencies?当 jar 文件具有各种传出依赖项时,如何使用 IKVMC 将特定 JAR 文件转换为 DLL?
【发布时间】:2014-11-17 06:32:32
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 请问您对 JAR 文件的转换有什么要求? MQ 有 .net 客户端。
  • 我需要在未安装客户端的情况下连接到 MQ。不要问我为什么。我的老板要求我这样做。我做到了。现在他们想要功能。
  • 我很欣赏客户端安装在机器上放置了大量材料;但是,您需要在运行程序的机器上复制一些客户端库 .net 或 JAR(已转换或未转换)。请记住,IBM 服务不会扩展到任何转换后的 JAR。
  • @Calanais 我知道。目前我可以发送消息并从我的 MQ 服务器接收回复。但我需要指定服务器应该回复的队列。为此,我需要导入com.ibm.mq.jar。因此,寻求帮助。

标签: java dll jar ibm-mq ikvm


【解决方案1】:

谈论让你的生活变得比需要的更艰难。使您的应用程序成为“.NET 托管”应用程序,那么您只需要名为 amqmdnet.dll 的 MQ dll(由 IBM 提供,它包含您需要的一切)。

因此,您无需完整安装 MQ 即可运行 .NET 应用程序。当然,IBM 不支持将 amqmdnet.dll 文件与您的应用程序一起部署,但您尝试进行的复杂设置也不支持。

【讨论】:

  • amqmdnet.dll 在没有安装 MQ 客户端的情况下无法工作。你的第二段对我来说毫无意义。你想说什么?
  • 是的,确实如此。请阅读手册:www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/…
  • 据我所知,如果没有安装 MQ 客户端,amqmdnet.dll 将无法工作。如果您知道使其工作的方法,请告诉我。我不在乎它是否不受支持。
  • 天啊。你甚至费心阅读我给你的链接吗?如果您将 MQ 应用程序设为纯“.NET 托管”应用程序,那么它会起作用。
【解决方案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) 将三个文件复制到您的目标PC:Test.exe、Test.config 和amqmdnet.dll,然后运行它。您可能需要更新 PATH 环境变量以指向 amqmdnet.dll 所在的目录。这通常不需要,但有时 Windows 会很挑剔。

【讨论】:

  • 谢谢。在您发布之前,我对 .NET 托管应用程序一无所知。
  • 这就是我给你链接的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2020-11-17
相关资源
最近更新 更多