C# 调用C++ DLL

fhqeeq821226 2009-12-17 03:28:24
LedZK.dll说明
函数名称:int WINAPI SendString(
unsigned char Addr;
int pWidth, pHeight, pLeft, pTop, EntMode, EntSpeed, Delay ,ClrFlag;
char *Str);
入口参数: Addr 屏地址,值范围1~32。通用地址0x00。
pWidth,pHeight显示区域宽度和高度(点像素),值为8的整数倍。
pLeft,pTop 显示区域的左边距和顶边距(点像素),值为8的整数倍。
EntMode 进入方式,值范围0~11。
EntSpeed 进入速度,值范围0~9。
Delay 停留时间,值范围0~99。
Str 要显示的字符串
函数返回: 1成功,0:失败
功能描述: 向LED发送字符串。.

c#中声明
[DllImport("LedZK.dll")]
public static extern int SendString(byte addr, StringBuilder str, int pWidth, int pHeight, int pLeft, int pTop, int Entmode, int EntSpeed, int Delay, int ClrFlag);

private void button1_Click(object sender, EventArgs e)
{
byte addr = 0;
int pwidth = 128;
int pheight = 16;
int pleft = 0;
int ptop = 0;
int entmode = 0;
int entspeed = 4;
int delay = 0;
int clrflag = 1;
StringBuilder sb = new StringBuilder(256);
sb.Append("14:06");
SendString(addr, sb, pwidth, pheight, pleft, ptop, entmode, entspeed, delay, clrflag);
}

错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
估计是参数问题,试了很多都不行,请高手指点



...全文
182 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhqeeq821226 2009-12-17
  • 打赏
  • 举报
回复
感谢各位,问题解决,结贴
fengling2001 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgke 的回复:]
[DllImport("LedZK.dll")]
public static extern int SendString(byte addr, int pWidth, int pHeight, int pLeft, int pTop, int Entmode, int EntSpeed, int Delay, int ClrFlag, StringBuilder str);
[/Quote]
参数需要严格一致,把对应的c++类型转换成C#的就可以
char chr[255] O StringBuilder
KCA_DIR I int
LPCSTR I string
int I int
LPSTR O StringBuilder
int* O out int
DWORD I int
DWORD* O out int
BOOL I bool
Rc_DBMgr I IntPtr
long* O out long
zgke 2009-12-17
  • 打赏
  • 举报
回复
[DllImport("LedZK.dll")]
public static extern int SendString(byte addr, int pWidth, int pHeight, int pLeft, int pTop, int Entmode, int EntSpeed, int Delay, int ClrFlag, StringBuilder str);

110,545

社区成员

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

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

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