char*
을 C 함수에서 반환하고 호출자가 할당을 해제 할 것을 기대하는 것이 좋습니다. 호출자가이 작업을 수행하지 않거나 (올바르게 또는 전혀) 메모리 누수가 발생할 수 있습니다. 과 같이 구현과
int GetString(char* str, int* len);
: (OpenGL을, 오픈 CL과 다른 라이브러리에 의해 사용되는 내가 본)이를 방지하는 한 가지 일반적인 방법은 프로토 타입을 선언하는 것입니다
int GetString(char* str, int* len)
{
if (str == NULL)
{
len = internal_get_string_length();
return 0; // No errors
}
else
{
if (len <= internal_get_string_length())
return -1; // not enough space in str
char* internal_str = internal_get_string_ptr();
strcpy(str, internal_str);
return 0;
}
}
문서에서는 str
이 NULL이면 반환 할 문자열의 길이가 len
으로 반환됨을 나타냅니다. 그렇지 않으면 포인터 str
에 필요한만큼의 문자가 포함될 것으로 예상됩니다. 이를 사용하기 위해 사용자는 str
에 대해 NULL을 사용하고 len
에 대해 int로 두 번 함수를 호출 한 다음 len
만큼 할당 된 char 배열을 사용하여 함수를 두 번 호출합니다. P/호출을위한 프로토 타입은 다음과 같습니다.
// Declaration
[DllImport("myDll.dll")]
int GetString(StringBuilder sb, ref int len);
// Usage
int length;
GetString(null, length);
var sb = new StringBuilder(length); // Set capacity
GetString(sb, length);
Console.WriteLine(sb.ToString()); // Do stuff with C# string
희망이 있습니다.
출처
2017-02-12 21:53:14
Ani
원본을 삭제하십시오. 나는 어제 삭제를 위해 실제로 표시했다, 누군가 그것을 복원해야한다! 또한 원래의 답변에는 아무런 대답도없고 하나의 덧글이 없었습니다 – sebas
@Flexo :이 속임수는 삭제되었습니다.이 질문은 다소 "부드럽지만"주제가있는 것처럼 보일 뿐더러 괜찮은 답변입니다. 다시 열어 보시겠습니까? –