pInvoke C# DLL导入问题
我在 C# 中的非托管 dll 函数 swe_get_planet_name() 上使用 P/invoke。 给定的函数定义是,
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);
这样执行时没有错误,但变量“name”在每个项目中被分配了一个无意义的“\0”,而不是它应该返回的行星名称。由于供应商提供的示例应用程序运行顺利,因此 DLL 没有任何问题。有什么想法吗?
Im using P/invoke on an unmanaged dll function swe_get_planet_name() in C#.
The given function definition is,
char* swe_get_planet_name(int ipl, char *spname);
This means the return value is assigned to char *spname? It seemed so from the sample code in the documentation.
char snam[40];
/*
* get the name of the planet p
*/
swe_get_planet_name(p, snam);
/*
* print
*/
printf(snam);
So my c# code is
[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);
This executes without error but variable 'name' is assigned a meaningless '\0' in each item instead of the planet name that it's supposed to return. Nothing wrong with the DLL since the vendor provided sample app works smoothly. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它看起来是一个非常弱且危险的 C 接口,没有传递大小参数。
这里的正常模式是提供一个 Stringbuilder 来接收文本,并让封送拆收器发挥作用。
It looks a very weak and dangerous C interface, without a size parameter being passed.
The normal pattern here is to provide a Stringbuilder to receive the text, and let the marshaler do it's magic.