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