c# 调用 c++ dll 传机构体指针问题? 本帖最后由 hanzhch1 于 2010-04-16 11:37:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用unsafe代码,C#里也用指针去读。哈哈很强大~ ....PDATA是啥?STRTEST*么?那么既然已经是指针了为啥还要PDATA*?你的函数里根本就不分配内存返回吧?从你的Test1在c#里的声明来看如果STRTEST*是PDATA的话那就是一个双重指针(STRTEST**).这样的话你C函数本身就是错的.LZ先把指针理清楚再说吧.另外C函数默认调用规则是cdecl,DllImport默认是StdCall,必须在DllImport里指明 不好意思,extern "C" __declspec(dllexport) int Test1(PDATA* pFirst)写错了,应该是 extern "C" __declspec(dllexport) int Test1(STRTEST* pFirst) 那应该就是调用规则的问题了.C默认的cdecl是调用方负责恢复栈指针ESP,DllImport默认的是被调用方负责恢复栈指针ESP. extern "C" __declspec(dllexport) int Test1(STRTEST* pFirst){ STRTEST *p=pFirst; int a=0; while(p->pNext!=NULL) { a++; p->s1=a;p=p->pNext; } return a;}//STRTEST 为单向链表 请教post请求返回 100错误 高手请进来:CBC中MD5与C#中MD5结果不一致??? 如何在关闭程序的时候结束另外的一个指定的进程? 关于droplistbox控件的一个问题 关于IHTMLDocument2中有关ActiveElement的问题 数据库还原问题 简单的问题!! 如何取得整个屏幕的尺寸? 谁知道现在上海居住证的办理手续 DevExpress 汉化包,在设计期怎么使用? 在线等,编译C#版飞鸽传书出现的问题 ultratree控件里节点的单击和双击事件分别 是什么?
那么既然已经是指针了为啥还要PDATA*?你的函数里根本就不分配内存返回吧?
从你的Test1在c#里的声明来看如果STRTEST*是PDATA的话那就是一个双重指针(STRTEST**).
这样的话你C函数本身就是错的.LZ先把指针理清楚再说吧.另外C函数默认调用规则是cdecl,DllImport默认是StdCall,必须在DllImport里指明
写错了,应该是 extern "C" __declspec(dllexport) int Test1(STRTEST* pFirst)
C默认的cdecl是调用方负责恢复栈指针ESP,
DllImport默认的是被调用方负责恢复栈指针ESP.
{
STRTEST *p=pFirst;
int a=0;
while(p->pNext!=NULL)
{
a++;
p->s1=a;
p=p->pNext;
}
return a;
}//STRTEST 为单向链表