0
C++ 프로젝트에 플러그인을 작성하고 관리되는 .NET 코드에서 C 함수의 노출을 허용하는 UnmanagedExports Nuget 패키지를 활용하고 있습니다. 내가 (C에서의 char * ++로 정의) 캐릭터 아래는이 작업을 위해 내가 정의한 UnmanagedExport의 방법을받는 플러그인을 작성했습니다 https://www.nuget.org/packages/UnmanagedExportsStringBuilder를 사용하여 pinvoke char * []을 반전합니다.
.
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder MyString)
{
//Use and modify the StringBuilder. It receives the string passed and returns the modified version because it is being passed by reference.
}
위의 코드는 아름답게 실행됩니다.
이제 UnmanagedExport 코드에 문자열 배열을 전달할 수 있습니까? C++은 호출에 char * []가 필요하다고 정의합니다.
이것은 작동하지 않습니다.
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder[] MyString)
{
}
골든 규칙은 먼저 동일한 인수를 사용하여 printf()로 값을 표시하는 C 함수를 작성하는 것입니다. 당신은 그 문제를 완전히 발견 할 수 있습니다 : * 배열의 길이는 얼마입니까? * 모르겠지만, C#은 몰랐습니다. Giesecke는 알지 못합니다. 관리되지 않는 코드를 아직 충분히 이해하지 못하면 해당 단계를 건너 뛰지 마십시오. –
@HansPassant 올바른 방향으로 나를 가리키는 입력을 주셔서 감사합니다. 필자는 아래에 내 대답을 추가했지만 이것은 문자열 배열로 전달할 수있게 해줍니다. 배열에 대한 변경 사항은 호출자 코드가 수정 된 경우 호출자 코드에 반영되지 않습니다. – CathalMF