C#调用C++DLL出现的错误

seadistant 2007-06-06 03:52:43
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 签名的调用约定和参数与非托管的目标签名是否匹配。
请高手帮助
...全文
333 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bseven521 2008-07-31
  • 打赏
  • 举报
回复
谢谢
seadistant 2007-09-26
  • 打赏
  • 举报
回复
谢谢大家,马上给分
wenbin 2007-06-06
  • 打赏
  • 举报
回复
[DllImport("kernel32.dll")]
private static extern int CreateFile(
string lpFileName, // file name
uint dwDesiredAccess, // access mode
int dwShareMode, // share mode
int lpSecurityAttributes, // SD
int dwCreationDisposition, // how to create
int dwFlagsAndAttributes, // file attributes
int hTemplateFile // handle to template file
);
别人把 _SECURITY_ATTRIBUTES这个结构体直接用int型替换
这个结构体一般不用,它涉及到安全问题,一般用不到,你再试试吧
xxelement 2007-06-06
  • 打赏
  • 举报
回复
匹配一直就是.Net调用C++动态库出现的问题。以后还是用.Net写Dll,直接引用方便,呵呵
叶子 2007-06-06
  • 打赏
  • 举报
回复
帮顶

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧