在 C# 中导入 MQIC.DLL
Import MQIC.DLL in C#
在我的系统中,我需要加载 MQIC.DLL (IBM WebSphere MQ) 以向 MQ 服务器发送和获取消息。
目前此服务是运行 VB5,我需要升级到.Net。当我尝试加载这个库时,出现错误:
试图读取或写入受保护的内存。这通常表示其他内存已损坏。
代码:
[DllImport("MQIC.DLL", EntryPoint = "MQCONNstd@16", SetLastError = true)]
public static extern void MQCONN(string QMgrName, long Hconn, long CompCode, long Reason);
有人知道为什么会这样吗?
VB5代码:
Declare Sub MQCONN Lib "MQIC.DLL" Alias "MQCONNstd@16" (ByVal QMgrName As String, Hconn As Long, CompCode As Long, Reason As Long)
这是 MQOD 结构:
public struct MQOD
{
public String StrucId; //Structure identifier'
public long Version; //Structure version number'
public long ObjectType; //Object type'
public string ObjectName; //Object name'
public string ObjectQMgrName; //Object queue manager name'
public string DynamicQName; //Dynamic queue name'
public string AlternateUserId; //Alternate user identifier'
}
IBM MQ 提供了 .NET 接口。我建议您使用它而不是 MQIC DLL。 http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q029250_.htm。产品附带很多样品。
更改 MQCONN
的声明以对所有 long
参数使用 out long
。
检查每个 API 调用的 MQ application programming reference,并确保对描述为输出或 input/output 的每个参数使用 out
或 ref
。
你也可以在你的MQ安装目录下寻找cmqc.h
,前提是你已经安装了开发环境。它具有所有 MQI 调用的声明。您可以将 C header 转录为 C# - 只要您看到指针 (*
),请使用 out
或 ref
.
但一般来说,正如其他人所建议的那样,将托管 .Net 类 用于 MQ 会更好。
在我的系统中,我需要加载 MQIC.DLL (IBM WebSphere MQ) 以向 MQ 服务器发送和获取消息。
目前此服务是运行 VB5,我需要升级到.Net。当我尝试加载这个库时,出现错误:
试图读取或写入受保护的内存。这通常表示其他内存已损坏。
代码:
[DllImport("MQIC.DLL", EntryPoint = "MQCONNstd@16", SetLastError = true)]
public static extern void MQCONN(string QMgrName, long Hconn, long CompCode, long Reason);
有人知道为什么会这样吗?
VB5代码:
Declare Sub MQCONN Lib "MQIC.DLL" Alias "MQCONNstd@16" (ByVal QMgrName As String, Hconn As Long, CompCode As Long, Reason As Long)
这是 MQOD 结构:
public struct MQOD
{
public String StrucId; //Structure identifier'
public long Version; //Structure version number'
public long ObjectType; //Object type'
public string ObjectName; //Object name'
public string ObjectQMgrName; //Object queue manager name'
public string DynamicQName; //Dynamic queue name'
public string AlternateUserId; //Alternate user identifier'
}
IBM MQ 提供了 .NET 接口。我建议您使用它而不是 MQIC DLL。 http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q029250_.htm。产品附带很多样品。
更改 MQCONN
的声明以对所有 long
参数使用 out long
。
检查每个 API 调用的 MQ application programming reference,并确保对描述为输出或 input/output 的每个参数使用 out
或 ref
。
你也可以在你的MQ安装目录下寻找cmqc.h
,前提是你已经安装了开发环境。它具有所有 MQI 调用的声明。您可以将 C header 转录为 C# - 只要您看到指针 (*
),请使用 out
或 ref
.
但一般来说,正如其他人所建议的那样,将托管 .Net 类 用于 MQ 会更好。