2016-09-22 1 views
0

내 시스템에서는 MQIC.DLL (IBM WebSphere MQ)을로드하여 MQ 서버로 메시지를 보내고 가져와야합니다.C에서 MQIC.DLL 가져 오기

현재이 서비스는 VB5에서 실행 중이므로 .Net으로 업그레이드해야합니다. 이 라이브러리를로드하려고하면 오류가 발생합니다.

보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.

코드 :이 일어나는 이유

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

아무도 생각이 있습니까?

VB5 코드 :

Declare Sub MQCONN Lib "MQIC.DLL" Alias "[email protected]" (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' 
} 
+0

아마도 VB5 Declare 문이나 네이티브 내보내기 프로토 타입을 보여줄 것입니다. –

+0

VB5 코드에 주석을 추가했습니다. Tks. –

+0

@CarlosHenriqueBiazinEsteves - (* 여기 계속) *'vb5' 앱은 클라이언트가 MQIC.DLL과 통신하는 클라이언트 서버 ('C++'app) 설정의 클라이언트입니다. 서버 응용 프로그램을 변경해야하는 경우이 두 서버와 통신되는 서버간에 통신이 어떻게 이루어지는 지에 따라 달라집니다. 'MQIC.DLL' 구조체 중 어느 것도 앞뒤로 보내지 않는다면 걱정할 필요가 없습니다. 이러한 구조를 앞뒤로 보내면 .net 포트에서 동일한 방식으로 유지되는지 확인해야하며 걱정할 필요가 없습니다. – Igor

답변

1

모든 long 매개 변수에 대해 MQCONN의 선언을 변경하여 out long으로 변경하십시오.

각 API 호출에 대해 MQ application programming reference을 확인하고 출력 또는 입력/출력으로 설명 된 모든 매개 변수에 out 또는 ref을 사용해야합니다.

개발 환경을 설치 한 경우 MQ 설치 디렉토리에서 cmqc.h을 찾을 수도 있습니다. MQI 호출은 모두 선언되어있다. 포인터 (*)를 볼 때마다 C 헤더를 C#으로 바꿔 out 또는 ref을 사용하십시오.

하지만 일반적으로 말해서 MQ의 관리되는 .Net 클래스를 사용하는 것이 훨씬 더 낫습니다.

+0

효과가있었습니다! 그것은 모든 방법을 위해 그것을 할 필요가 있습니까? 감사합니다. –

+0

@CarlosHenriqueBiazinEsteves - 업데이트를 참조하십시오. –

+0

유리, 감사합니다. 하지만 난 아직 의심의 여지가 ... MQOPEN 메서드는 밖으로 매개 변수가 있습니다. C#에서는 ref로 선언하지만 작동하지 않습니다. 내가 어떻게 신고해야하는지 알고 있니? 이 게시물에 코드를 추가했습니다. –

1

IBM MQ는 .NET 인터페이스를 제공합니다. MQIC DLL 대신 사용하는 것이 좋습니다. http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q029250_.htm. 제품과 함께 제공된 많은 샘플이 있습니다.

+0

Shashi는 우리 서버에서이 DLL 버전으로 C++ 프로그램을 운영 중입니다. 이 응용 프로그램은 2002 년부터 VB5 프로그램과 함께 실행되었습니다. 이 업그레이드에서, 내 생각은이 구현을 변경하지 않고 .net으로 업그레이드 만합니다. –

+0

C에서 MQIC.DLL을 사용하는 것이 불가능합니까? –

+0

@CarlosHenriqueBiazinEsteves -이 대답은 좋은 것 같습니다. 네이티브 라이브러리가하는 일을 정확히 수행하지만 .net에 맞춰진 관리 라이브러리가 있다면 왜 사용하지 않을까요?관리 라이브러리가 완전히 다른 기능 세트를 제공하지 않는 한 구현을 변경하지 않습니다. 그렇지 않으면 대답으로 제안되지 않았을 것입니다. – Igor