C 선언을 처리하는 방법 :C :이 방법을
struct t_name
{
char first_name[128];
char nickname[128];
int32_t words[7];
uint16_t parts_of_speech[7];
uint32_t language;
bool has_name;
};
char* Translation_TranslateNameEnglish(DFHackObject* trans, const t_name* name);
나는 C#에서 그 일을하고 어떻게 :
[StructLayout(LayoutKind.Sequential), Serializable]
public struct DFName
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string FirstName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string NickName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public int[] Words;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public ushort[] PartsOfSpeech;
public uint Language;
public bool HasName;
}
[DllImport(DllName)]
public static extern string Translation_TranslateNameEnglish(IntPtr ptr, ref DFName name);
콜 :
DFHack.Translation_TranslateNameEnglish(translation, ref name)
작업을 첫 번째 매개 변수로 IntPtr 아무 문제가, 나는 비슷한 호출에서 일하고있다. DFName 구조체는 다른 호출로 채워지며 유효한 데이터를 포함합니다. 그러나 TranslateNameEnglish를 호출하면 작동하지 않는 항목이 있습니다. 그 라인이 실행되면 나는 "보호 된 메모리를 읽거나 쓰려고 시도했다. 이것은 종종 다른 메모리가 손상되었다는 표시이다." 내가 뭘 잘못 했니?
중요한 부분을 언급하는 것을 잊었습니다. DFName 구조체가 다른 구조체의 일부로 검색되었습니다. 방법
public static extern int Creatures_ReadCreature(IntPtr ptr, uint index, out DFCreature creature);
동일한 이메일/OpenID를 사용하여 동일한 사람으로 로그인하면 답변을 수정할 수 있습니다. – abatishchev