我正在爲第三方.dll創建C++包裝器,以便在C#P/Invoke中使用它。爲此,我可以訪問使用該.dll的演示應用程序,由於我不是C專家,因此我非常依賴此代碼。一切工作正常,但幾個星期前,我碰到一些代碼,我發現相當奇怪傳來:將char *值存儲到無符號char **數組中
unsigned char** ppucValues = new unsigned char*[iSize];
for(int i = 0; i < iSize; i++){
ppucValues[i] = (unsigned char *)new int;
*(int *)ppucValues[i] = piValues[i]; //(piValues is int*)
}
裏面的for循環困擾了我一段時間,但這些線路在第一行密切關注,我想「嘿,這一定意味着一個無符號的字符指向一個int ...對嗎?'
是的,我仍然不太確定,但我已經使用了相同的概念幾種不同的類型和它的作品。在任何人想知道原因的情況下,我必須將不同類型的值存儲到這個無符號字符**中,並將其傳遞給第三方.dll中的方法,顯然,這需要使用這個無符號字符**。這就是製造商在他們的演示應用程序中的做法,所以我只是隨它而行。
因爲這樣,我的問題:我必須做同樣的操作,但現在我正在採取char **(字符串數組)而不是int *或double *或其他。基於我剛纔說的,這是我想出了:
for(int i = 0; i < iSize ; i++){
ppucValues[i] = (unsigned char *) new char*; //type of ppucValues as unsigned char** and type of ppucValues[i] as char*???
*(char **)ppucValues[i] = ppcValues[i]; //Hmmm... what?!
}
但它不工作得如我所料(更何況我是在它只有50%的把握)。例如,如果我的輸入(ppcValues [i])是「test」,那麼我的輸出(ppucValues [i])就會變成「〜4」。我可能會冒險提出這是一個與C++或其指針毫無關係的編碼問題,但我會在StackOverflow中向那些善良的人留下建議。任何幫助,將不勝感激。
¹如果我錯了,請賜教!
new char *;意思是「分配一個指向char的指針」;一個指針是一個int;即4或8字節(取決於32/64位)。 – Exceptyon