日期:2014-05-19  浏览次数:20942 次

C#调用C++DLL出现的错误
C++的.h声明              
__declspec(dllimport)
FT_HANDLE   WINAPI   FT_W32_CreateFile(
LPCSTR lpszName,
DWORD dwAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreate,
DWORD dwAttrsAndFlags,
HANDLE hTemplate
);

___________________________________________
C#


using   FT_HANDLE=System.IntPtr;
using   LPVOID   =   System.IntPtr;
using   LPCSTR=System.String;
using   FT_STATUS   =   System.Int64;
using   DWORD   =   System.UInt64;
using   HANDLE   =   System.IntPtr;
using   BOOL=System.Boolean   ;
___________________________________________________________________
[DllImport( "FTD2XX.Dll ")]
                public   static   extern   FT_HANDLE   FT_W32_CreateFile(LPCSTR   lpszName,   DWORD   dwAccess,   DWORD   dwShareMode,   out  

_SECURITY_ATTRIBUTES
        lpSecurityAttributes,   DWORD   dwCreate,   DWORD
        dwAttrsAndFlags,   HANDLE   hTemplate);
                public   struct   _SECURITY_ATTRIBUTES
                {
                        public   DWORD   nLength;
                        public   LPVOID   lpSecurityDescriptor;
                        public   BOOL   bInheritHandle;
                }   ;


                public   static   void   SendPackage(string   str)
                {

                        FT_STATUS   ftStatus;
                        FT_HANDLE   ftHandle;

                        string   buf= "usb ";
                        _SECURITY_ATTRIBUTES   tmp;
                        //ftStatus   =   FT_ListDevices(0,   Buf,   FT_LIST_BY_INDEX   |   FT_OPEN_BY_SERIAL_NUMBER);
                        ftHandle   =   FT_W32_CreateFile(buf,   (ulong)0x80000000L   |   0x40000000L,   0,   out   tmp,   (ulong)3,   (ulong)

0x00000080   |   0x40000000   |   1,   (IntPtr)0);
                }

提示出错:
对   PInvoke   函数“ProtocolX!ProtocolX.ProtocolUsb2_0_1::FT_W32_CreateFile”的调用导致堆栈不对称。原因可能是托管的  

PInvoke   签名与非托管的目标签名不匹配。请检查   PInvoke   签名的调用约定和参数与非托管的目标签名是否匹配。
请高手帮助

------解决方案--------------------
帮顶
------解决方案--------