다음과 같은 도움이 필요합니다. C++ API (소스에 액세스 할 수 없음)가있어 char * 특성을 반환하는 메서드 또는 char * 특성이 포함 된 구조체를 반환하는 데 어려움을 겪고 있습니다. API의 문서에 따르면 반환 값은 다음과 같습니다.C#에서 일련의 Null 종료 문자열에 대한 포인터를 마샬링하는 방법은 무엇입니까?
반환 값
함수가 성공하면 반환 값은 호스트 시스템의 각 프로젝트에 대해 하나의 일련의 null 종료 문자열로 끝나는 포인터입니다 두 번째 null 문자. 다음 예는 널 종료 문자를 나타내는 <null>
와 버퍼 내용을 보여줍니다 함수가 실패하면
project1<null>project2<null>project3<null><null>
을, 반환 값은 NULL입니다
제가하는 데 문제는입니다 C 번호 만에 반환 된 포인터 이 경우 첫 번째 값 ... project1을 포함합니다. 전체 목록을 관리 측면에서 반복 재생하려면 어떻게해야합니까?
다음은 C# 코드입니다 :
[DllImport("vmdsapi.dll", EntryPoint = "DSGetProjectList", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr DSGetProjectList();
호출 방법 :
IntPtr ptrProjectList = DSAPI.DSGetProjectList(); string strProjectList = Marshal.PtrToStringAnsi(ptrProjectList).ToString();
strProjectList은 첫 번째 항목이 포함되어 있습니다.
여기 ...
다음DllImport char *DSGetProjectList dsproto((void));
... 내가 테스트 목적으로 사용했습니다 콘솔 응용 프로그램 ++은 C에서 몇 가지 예제 코드 API의 헤더 파일에서 정보 것입니다
char *a; a = DSGetProjectList(); while(*a) { printf("a=%s\n", a); a += 1 + strlen(a); }
각 반복은 모든 프로젝트를 목록에 올바르게 표시합니다.
사용하는 C++ API의 서명과 적어도 C# 코드를 제공해야합니다. 이 API를 호출합니다. – zakinster
C++ API를 호출하는 C# 코드를 추가하십시오 – mmpatel009
결과 (길이)를 신중하게 확인하지 않으십니까? –