C 랩퍼를 작성한 C++ 기반 바이너리 (dll)가 있습니다. dll은 데이터 수신이 끝나면 콜백을 시작하는 webservice를 사용합니다. 나는 필요한 데이터를 생성하기 위해 웹 서비스가 사용하는 플레이어 이름의 매개 변수를 가진 메소드를 호출한다. 플레이어가 유효하면 콜백이 성공적으로 실행되고 데이터를 잘 사용할 수 있습니다. 플레이어가 유효하지 않으면 C++ 바이너리 내에서 Null 참조 예외가 발생합니다. 이상한 점은 C++ 코드를 실행하면 콜백이 제대로 실행된다는 것입니다.C++에서 C# 래퍼 Null 예외 오류
친구와 저는 가능성이 큰 문제는 null이 바이너리에서 전달되고 C++이 처리 할 수 있지만 C#으로 처리 할 수 없다는 것을 추론했습니다. 그것이 C++에서 잘 작동한다고 가정하면 바이너리 자체에서는 문제가되지 않을 것입니다. 콜백의 변환이 정확합니까?
C++ 콜백
void (game_CALLBACK *on_game_info)(const game_player_array *teammates, unsigned int teammates_array_size,
const game_player_array *opponents, unsigned int opponents_array_size,
const game_hero_array *team_banned_hero,
unsigned int team_banned_hero_size,
const game_hero_array *opponent_banned_hero,
unsigned int opponent_banned_hero_size,
const char *message);
C#을 콜백
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void game_services_callback_on_game_info(
ref game_summoner_array teammates, uint teammates_array_size,
ref game_summoner_array opponents, uint opponents_array_size,
ref game_champion_array team_banned_hero, uint team_banned_hero_size,
ref game_champion_array opponent_banned_hero, uint opponent_banned_hero_size,
[In] [MarshalAs(UnmanagedType.LPStr)] string message);
해피 홀리데이!
내장 유형 매개 변수를 null 허용 유형으로 변경하면 문제가 해결됩니까? 'uint'에'null '을 할당하려고 할 때마다 엉망이라고 생각합니다. – Anthony