2013-09-06 6 views
1

C++로 작성된 DLL이 LZO 라이브러리를 둘러싼 C#의 래퍼입니다. 그러나 테스트 용으로 형식을 변환 할 수 있는지 알고 싶기 때문에 파일의 내용과 크기를 가져 와서 복사본을 작성하는 테스트 함수를 만들었습니다.C# 응용 프로그램에서 C++ 함수 실행

[DllImport(@"GLZO.dll")] 
public static extern void WriteFile(byte[] source, int size); 

을 그리고 다음과 같이 호출 : http://i.epvpimg.com/u4mgh.png

나는 다음과 같이 가져 :

 byte[] g = ReadFile("raw/roota.eix"); 
     WriteFile(g, g.Length); 
다음
extern "C" 
{ 
    __declspec(dllexport) void WriteFile(lzo_uint8 * source, int size) 
    { 
     FILE * fileToWrite; 
     fileToWrite = fopen("test.eix", "wb+"); 
     if (fileToWrite) 
     { 
      fwrite(source, 1, size, fileToWrite); 
     } 
     fclose(fileToWrite); 
     free(source); 
    } 
    } 

는 가독성에 대한 코드의 이미지입니다

문제는 ReadFile 함수에 없습니다. 확인했습니다. 다른 파일에서 복사본을 만들고 체크섬으로 두 가지를 모두 확인했습니다.

내 질문은 : 어떻게하면 바이트 []를 lzo_uint8 * (unsigned char *)로 변환해야합니까?

답변

0

알 수 있습니다. 난 그냥 IntPtr, 부호없는 char * = IntPtr C#에서 마샬링했다.

 [DllImport(@"GLZO.dll", CallingConvention = CallingConvention.Cdecl)] 
: 또한

, "해당 없음"유형에 대한 예외를 방지하기 위해이 같은 DLL을 가져와야