我正在为第三方.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