0
我有一個基於C++的二進制文件(dll),我寫了一個C#包裝器。該DLL使用一個web服務,它在完成獲取數據時觸發回調。我調用一個帶有參數的webservice用來生成我需要的數據的參數。如果玩家有效,回調會成功觸發,我可以很好地使用這些數據。如果播放器無效,我會在C++二進制文件中得到一個空引用異常。奇怪的是,如果我運行C++代碼,它會很好地運行回調。C++到C#包裝空異常錯誤
一位朋友和我推斷,可能的問題是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'。 – Anthony