Im在C#中的非託管dll函數swe_get_planet_name()上使用P/invoke。 給定函數定義,pInvoke C#DLL導入問題
char* swe_get_planet_name(int ipl, char *spname);
這意味着返回值被分配到char * spname?它似乎是從文檔中的示例代碼。
char snam[40];
/*
* get the name of the planet p
*/
swe_get_planet_name(p, snam);
/*
* print
*/
printf(snam);
所以我的C#代碼是
[DllImport("swedll32.dll")]
private static extern void swe_get_planet_name(int ipl, char[] spname);
char[] name = new char[40];
int p = 3;
swe_get_planet_name(p, name);
此執行沒有錯誤,但是變量 '名' 被分配了一個毫無意義的 '\ 0' 在每一個項目,而不是這個星球的名字它應該返回。由於供應商提供的示例應用程序運行良好,因此無錯。有任何想法嗎?
你試過傳遞一個指向字節數組而不是char []的指針嗎?我相信這將會被整理成不同的形式。 – 2010-09-05 11:25:03