2015-01-22 1 views
0

C# 응용 프로그램과 기존 C++ DLL간에 데이터를 마샬링하는 데 문제가 있습니다. 이 작업을 어렵게 만드는주의 사항은 배열에 대한 부호없는 char 포인터이므로 C#에서 호출 한 후 모든 필드의 데이터에 액세스해야합니다. 안전하지 않은 코드를 사용하지 않는 것이 좋습니다. 여기 C# DLL에서 코딩되지 않은 char * 배열 (인 및 아웃)

는 C++ 서명입니다 :

BYTE GetData(unsigned char *Data_Type, unsigned char *Data_Content, unsigned int *Data_Length); 

나는 C#에서 물건의 무리를 시도했지만, 여기에 내가 지금 가지고있는 무엇 : 다음

[DllImport("somecpp.dll")] 
public static extern byte GetData([In][Out] ref byte Data_Type, [In][Out] ref byte[] Data_Content, [In][Out] ref int Data_Length); 

를 호출,이 시도입니다 :

byte retrievedData = GetData(ref data_type, ref data_content, ref data_length); 

이것은 분명히 작동하지 않으며 다음에 무엇을 시도해야할지 모르겠습니다. 어떤 아이디어? 감사!

+1

'uint'는 Data_Length의 올바른 유형이 될 것이지만 왜이 문제가 발생하는지 알지 못합니다. 항상 작동하지 않는 것에 대해 이야기 할 때 언제나 그렇듯이 구체적이어야합니다. 그렇다면 메시지가 무엇인지 오류 메시지가 표시됩니까? – Guvante

답변

2

ref byte[] 매개 변수는 unsigned char**과 일치합니다. 너무 간접적 인 수준입니다.

P 개의 /의 호출은

[DllImport("somecpp.dll")] 
public static extern byte GetData(
    ref byte Data_Type, 
    [In,Out] byte[] Data_Content, 
    ref uint Data_Length 
); 

함수 cdecl을 사용하는 것이 타당하다 할 것이다. 우리는 여기서 그것을 말할 수 없습니다.

Data_Type 인수가 ref이 아닌 out이어야한다고 생각됩니다.

+0

와우,이 작품은 ... 정말 고마워! 나는 반 폐쇄라고 생각했다. – user3617429