2016-09-22 4 views
0

In meinem System muss ich MQIC.DLL (IBM WebSphere MQ) laden, um Nachrichten an einen MQ-Server zu senden und abzurufen.Importieren Sie MQIC.DLL in C#

Momentan läuft dieser Dienst in VB5, und ich muss auf .Net aktualisieren. Wenn ich versuche, diese Bibliothek zu laden, erhalte ich den Fehler:

Versuch, geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.

Der Code:

[DllImport("MQIC.DLL", EntryPoint = "[email protected]", SetLastError = true)] 
public static extern void MQCONN(string QMgrName, long Hconn, long CompCode, long Reason); 

Hat jemand Ahnung, warum es passiert?

Der VB5 Code:

Declare Sub MQCONN Lib "MQIC.DLL" Alias "[email protected]" (ByVal QMgrName As String, Hconn As Long, CompCode As Long, Reason As Long) 

Dies ist MQOD Struktur:

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' 
} 
+0

Vielleicht zeigen Sie die funktionierende VB5 Declare-Anweisung oder den nativen Export-Prototyp. –

+0

Ich habe einen Kommentar mit dem Code in VB5 hinzugefügt. Tks. –

+0

@CarlosHenriqueBiazinEsteves - (* hier fortgesetzt *) Also ist die 'vb5'-App der Client in einem Client-Server (' C++ 'app) Setup, wo der Client auch mit MQIC.DLL kommuniziert. Ob Sie die Server-App ändern müssen, hängt davon ab, wie die Kommunikation zwischen diesen beiden kommuniziert und was kommuniziert wird. Wenn keine der MQIC.DLL-Strukturen zurück/her gesendet wird, müssen Sie sich keine Gedanken darüber machen. Wenn Sie diese Strukturen hin und her senden, müssen Sie überprüfen, ob sie auf die gleiche Weise im .net-Port gespeichert sind, vielleicht auch nicht, um die Sie sich kümmern müssen. – Igor

Antwort

1

Ändern Sie die Deklaration MQCONN, um out long für alle long Parameter zu verwenden.

Überprüfen Sie MQ application programming reference für jeden API-Aufruf und stellen Sie sicher, dass Sie out oder ref für jeden Parameter verwenden, der als Ausgabe oder Eingabe/Ausgabe beschrieben wird.

Sie können auch in Ihrem MQ-Installationsverzeichnis nach cmqc.h suchen, sofern Sie die Entwicklungsumgebung installiert haben. Es hat Deklarationen aller MQI-Aufrufe. Sie können die C-Kopfzeile in C# umschreiben - verwenden Sie out oder ref, wo auch immer Sie einen Zeiger (*) sehen.

Aber im Allgemeinen werden Sie viel besser mit verwalteten. Net-Klassen für MQ, wie andere vorgeschlagen.

+0

Es hat funktioniert! Es ist notwendig, es für alle Methoden zu tun? Danke –

+0

@CarlosHenriqueBiazinEsteves - Siehe Update. –

+0

Yuri, Vielen Dank für Ihren Beitrag. Aber ich habe noch Zweifel ... Die MQOPEN-Methode hat einen Parameter in out. In C# erkläre ich dies mit ref, aber nicht arbeiten. Weißt du, wie ich es erklären muss? Ich habe den Code in diesem Beitrag hinzugefügt. –

1

IBM MQ bietet eine .NET-Schnittstelle. Ich empfehle Ihnen, das anstelle von MQIC DLL zu verwenden. http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q029250_.htm. Mit dem Produkt werden viele Muster ausgeliefert.

+0

Shashi, auf unserem Server läuft ein C++ - Programm mit dieser DLL-Version mit einigen speziellen Dingen aus unserem Geschäft. Diese Anwendung in Server laufen seit 2002 zusammen das VB5-Programm. In diesem Upgrade ist meine Idee diese Implementierung nicht zu ändern, sondern nur auf .net zu aktualisieren. –

+0

Es ist unmöglich, MQIC.DLL in C# zu verwenden? –

+0

@CarlosHenriqueBiazinEsteves - Ich glaube, diese Antwort ist eine gute. Wenn es eine verwaltete Bibliothek gibt, die genau das tut, was die native Bibliothek tut, aber auf .net ausgerichtet ist, warum dann nicht verwenden?Dies ändert nichts an der Implementierung, es sei denn, die verwaltete Bibliothek bietet eine völlig andere Funktionalität, die ich bezweifle, da sie sonst nicht als Antwort vorgeschlagen wurde. – Igor

Verwandte Themen