mdsk.net
当前位置:首页 >> C#调用C++.Dll库发生堆栈不平衡的问题。请问如何解... >>

C#调用C++.Dll库发生堆栈不平衡的问题。请问如何解...

声明调用方式,字符集了嘛?不对称一般来说是参数问题,确保参数类型一致外还需要字符集类型一致,调用方式一致一段设置调用方式.设置字符集的代码如下[UnmanagedFuctionPointer(CallingConvention.StdCall,CharSet=CharSet.Unicode)]接函数调用声明

栈不对称一般是调用约定不一致.比如vc6里面的声明时用__cdecl,而c#中没有指定__cdecl方式,则会出现以上错误.c#中导出接口时使用__cdecl的方法:[dllimport( "msvcrt.dll ", charset=charset.ansi, callingconvention=callingconvention.cdecl)] public static extern int max(int a, int b);不过看你上面的定义里看出max这个函数为__stdcall(默认).你再按这个思路检查一下吧.

Msg,Len,Files都是string类型?那么不必加ref,因为引用类型本身就是指针类型.

可能只是临时打的代码,整体方法是对的,问题在于楼主似乎对函数指针的概念不太清楚.通常调用函数的过程都是先找到函数入口然后将参数列表入栈,最后得到一个返回值.一个函数指针可以描述出函数的这3个关键信息以供正确调用.函

x86的系统调用x64的DLLDLL需要的运行库没有装

这个很容易,使用委托即可看看这个http://zhidao.baidu.com/link?url=6fz4JA7b-qfa6W2n_9JmZ-jKwKWOWaNznslMofNSJs9G9aQGJf48HY7dBzsxCmCcLjP1PFGqt7dIZ9RgjVujmK

调用C++的dll:[DllImport(@"SuperVisor.dll")] private extern static int InitSuperVisorDll(IntPtr Mainhwnd, IntPtr hwnd, string LedName, string LedIPaddress, UInt16 LedNetport, int LedWidth, int LedHeight);然后就可以在下面的程序中调用InitSuperVisorDll了啊.参看:http://www.cnblogs.com/gaoweipeng/archive/2009/04/05/1429704.html

看看是__stdcall 还是__cdcall ,另外将string ipAddr,改为StringBuder

楼主 建议你在编辑dll 动态数据库时不要使用全局变量建议你使用返回指针来操作返回值如:void A( char *str, long len){ char* sc = str ; for(long i = 0; i 评论0 0 0

好像是参数类型传递有问题 你把C#代码string换成 char 试试 在C++里面 char就是一个字符 char[] 才是C#里面的数组

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com