一種方式來實現這一點(我用的PInvoke這樣做)是建立在C++/CLI(託管C++)將與本機C工作++庫調用本身就是一箇中間層的庫,而且還提供C#爲您的C#應用程序提供託管API。所以,在頂級它的工作是這樣的:
Your C# app <-> C++/CLI middle lib <-> C++ native lib
你可以找到自己的開源項目https://bitbucket.org/optiklab/roboball一個這樣的電話,其工作原理是這樣的一個例子:
FootballRobot C# app <-> RobotMoveLib C++/CLI <-> MoviRadioUM C++
所以,一個例子使炭灰的陣列從C#到C++的看起來像這樣: 1. C++/CLI方法獲取數組作爲參數:
void CMoviRadioUM::Movi_radio_send_message(..., array<Byte>^msg)
{
// Convert to native format
pin_ptr<Byte> data = &msg[0];
unsigned char * pData = data;
// Native call to C++ lib passes Char *
movi_radio_send_message(..., &pData);
}
而且從C#中,我們可以這樣調用:
_moviRadio = new CMoviRadioUM();
_moviRadio.Movi_radio_send_message(..., Encoding.UTF8.GetBytes(data));
要通過更復雜的結構的陣列,像結構或類,我相信你需要將其轉換爲簡單對象或指針數組,因爲本機C++庫將不知道你的經理
你需要知道返回值,然後沒有別的..你使用PInvoke,那就是它 – Amit
確實。你首先了解C++簽名,以及它是如何被調用的,這些還沒有提供。 –