2014-11-10 1 views
2

부분적인 문서 만 있고 소스 코드에 액세스 할 수없는 C++ DLL이 있습니다. 내 C# 응용 프로그램에서이 C++ 라이브러리의 함수를 사용해야합니다.C#에서 사용할 C++ 함수를 변환하십시오.

[DllImport(cpplib.dll)] 
public static extern long someFunctionsWithNoParameters(); 

을 내가 선언이 (인수가없는 기능)처럼 내 C# 응용 프로그램에서 C++ DLL에서 함수를 호출하고보다 것은 그것을 호출 할 때, 작동, 함수가를 반환 : 이것은 내가 지금까지 무엇을 가지고 long 값은 C++ 함수에 의해 반환됩니다.

그러나 포인터 또는 참조 매개 변수 또는 C++ 함수에 의해 in 및 out으로 정의 된 매개 변수를 사용하여 함수를 처리하는 방법을 알지 못합니다. 예를 들어이 C++ 기능 :

long functionWithParameters(long &State, char *pName, int nLen) 

이 함수는 (내가 아닌 소스, DLL의 헤더 파일에 액세스 할 수) 선언 방법이다. 매개 변수 State 및 pName은 out 매개 변수로 선언되고 매개 변수 nLen은 매개 변수에서와 같이 선언됩니다. [C# 응용 프로그램에서 [DllImport] 줄 아래에이 C++ 함수를 선언하고 그것을 사용하는 것보다 (어떤 형식의 매개 변수를 전달해야하며 out 매개 변수를 읽는 방법)? C/C++ 포인터와 참조 형식 사이의 변환 규칙이 일부 C# 형식에 있습니까?

감사합니다.

+0

여기에 대한 대답은 너무 광범위합니다. http://msdn.microsoft.com/en-us/library/ms173184.aspx를 참조하십시오. 그들이 올 때 특정 질문을 게시하십시오. –

답변

1

가져온 함수에 대해 일치하는 호출 규칙을 선언해야합니다. 이 같은 __cdecl 또는 __stdcall, 시도해 볼 수도 있습니다 :

(대부분의 실제 구현에서 동일) 포인터와 참조 정보
[DllImport(cpplib.dll, CallingConvention=CallingConvention.Cdecl)] 
public static extern long someFunctionsWithNoParameters(); 

, 당신은 자세한 내용에 대한 MSDN을 참조 안전하지 않은 컨텍스트 및 C# 포인터를 사용해야합니다.

+2

"* 포인터와 참조 (대부분의 실제 구현에서 동일)에 대해서는 안전하지 않은 컨텍스트와 C# 포인터를 사용해야합니다. *"아니오,'ref'는 참조에서 잘 작동하고'out' 또는'ref'는 포인터로 사용됩니다. – ildjarn

+0

아, 좋겠다 ^^ – Kelm

+0

네, 고맙습니다. :) –

관련 문제