2014-04-02 6 views
0

나는 C# dll() 메서드를 호출하는 C++ dll (Cli) 있습니다. 난에서 호출 어떻게C++에서 C# 메서드로 ref 매개 변수를 전달하는 방법은 무엇입니까?

MyClass^ myClass = gcnew MyClass(); 
ClassA a = gcnew ClassA(); 
ClassB b = gcnew ClassB(); 
myClass->DoSomeWork(a, b); 

: 서명에 더 심판없었다 경우

Class MyClass 
{ 
    void DoSomeWork(ref ClassA a, ClassB b); 
} 

내 코드는 다음과 같은 것입니다 :

는 C# dll은 다음과 같은 방법 서명이 서명에 심판이있는 경우 C++ 코드?

한 번 더 queastion 난이 - C#에서 내가 배열에있는 모든() 메서드를 호출 할 수 있지만 어떤 이유로 그것을

if (reply->Any()) 

내가 오류가 작동하지 않는 C++/CLI 일 : 오류 C2039를 '모든이'도움이 appricated 될 것이다

'시스템 :: 배열'의 구성원이 아닌

들으

+0

C++/CLI는 호출 사이트에서 주석을 사용하지, 사용하려는 코드가 동일합니다. Any()는 C++/CLI에서 지원되지 않는 확장 메소드입니다. Enumerable :: Any()를 명시 적으로 호출해야합니다. 질문 당 하나의 질문 만하십시오. –

답변

0

당신이 만약 compile your C++ DLL as a Managed Assembly 그러면 C# 어셈블리를 사용하는 것처럼 액세스 할 수 있어야합니다.

+0

사실, 그저 myClass-> DoSomeWork (ref a, b)라고 부를 수는 없으므로; ref는 C++/cli에서 유효한 구문이 아닙니다. – Dardar

0

1A) 당신은 사용할 수 있습니다 myClass->DoSomeWork(*a, b);

1B) ClassA 클래스 인 경우는 ref 어쨌든 중복됩니다. 당신은 C++/CLI에 ref 매개 변수를 전달하기 위해 아무것도 할 필요가 없습니다 using namespace System::Linq;

0
  1. : 당신이 당신의 소스 코드가 있는지 여부를 if (reply->Any()) 검사에 대한

    2). C#의 void DoSomeWork(ref ClassA a, ClassB b); 메서드는 C++/CLI에서 void DoSomeWork(ClassA^% a, ClassB^ b);으로 표시됩니다. %을 비 관리 C++의 &과 동일하게 생각하면 메서드 호출에 특별한 매개 변수를 추가하지 않아도 매개 변수를 전달할 수 있습니다.

  2. Any()Linq::Enumerable 정의 확장 방법이다. C++/CLI에서 확장 메서드를 호출하는 방법은 this answer을 참조하십시오.
관련 문제