如何处理特殊字符0x00?

dz08039 2006-05-20 08:25:54
for (i=0;i<720;i++)
{
tmp_string[i]=0x00
}
CString s(tmp_string);
*lpDataBuff= (LPBYTE)(LPCTSTR)s;

好象字符串一到0x00就认为结束了,不能拷贝过去了.请教如何解决.谢谢
...全文
818 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonshark 2006-05-23
  • 打赏
  • 举报
回复
memcpy(*lpDataBuff,tmp_string,720);
不过我不知道你为什么要用LPBYTE*,而不直接用LPBYTE.
VB我不熟悉,总之你调用之前必须保证*lpDataBuff指向的空间是有效的
dz08039 2006-05-23
  • 打赏
  • 举报
回复
dll被vb调用,vb里要定义什么变量和他对应
dz08039 2006-05-23
  • 打赏
  • 举报
回复
BOOL EXPORTED_DLL_FUNCTION ReadState (unsigned int iBoxNo,LPBYTE *lpDataBuff,unsigned int iBuffLen)
dz08039 2006-05-23
  • 打赏
  • 举报
回复
VC:BOOL EXPORTED_DLL_FUNCTION ReadState (unsigned int iBoxNo, LPBYTE lpDataBuff,unsigned int iBuffLen)
int j=1;
for (int i=0;i<720;i++)
{
tmp_string[i]=j;
j++;
if (j>255)
{
j=1;
}
}
memcpy(lpDataBuff,tmp_string,720);
return true;
}

VB:Public Declare Function ReadState Lib "SetState.dll" (ByVal iBoxNo As Long, ByRef lpDataBuff() As Byte, ByVal iBuffLen As Long) As Boolean

Dim b(720) As Byte
j = ReadState(Val(Text3.Text), b(), 720)


运行vb,直接退出.

一条晚起的虫 2006-05-23
  • 打赏
  • 举报
回复
VB通不过?
dz08039 2006-05-23
  • 打赏
  • 举报
回复
Dim a(720) As Byte
不行的,编译同不过的
一条晚起的虫 2006-05-23
  • 打赏
  • 举报
回复
Dim a(720) As Byte
dz08039 2006-05-23
  • 打赏
  • 举报
回复
怎么在VC里调用?
DLL:
BOOL EXPORTED_DLL_FUNCTION ReadState (unsigned int iBoxNo,LPBYTE *lpDataBuff,unsigned int iBuffLen)
{ int j=1;
for (int i=0;i<720;i++)
{
tmp_string[i]=j;
j++;
if (j>255)
{
j=1;
}
}
memcpy(lpDataBuff,tmp_string,720);
return true;
}

Vc:
typedef BOOL (* lpReadLEDState)(unsigned int,LPBYTE,unsigned int);
int main(int argc, char* argv[])
{
HINSTANCE hDll; //DLL句柄
lpReadLEDState ReadLEDState; //函数指针
hDll = LoadLibrary("c:\\Set.dll");
if (hDll != NULL)
{
ReadLEDState = (lpReadLEDState)GetProcAddress(hDll,"ReadLEDState");
if(ReadLEDState!=NULL)
{
LPBYTE lpDataBuff;

for (int i=0;i<720;i++)
{
tmp_string[i]=1;
}

unsigned int iBuffLen;
BOOL result = ReadLEDState(1,lpDataBuff,1);
printf("%d",result);
}
FreeLibrary(hDll);
}
return 0;
}

可是出错,不知怎么调用?
dz08039 2006-05-23
  • 打赏
  • 举报
回复
vb需要定义成什么类型呢?
一条晚起的虫 2006-05-23
  • 打赏
  • 举报
回复
数据是肯定传过去了,别用字符串看这段内存。
VB中定义二进制数组。
jasonshark 2006-05-23
  • 打赏
  • 举报
回复
怎么会呢?
*lpDataBuff指向的空间足够大吧?

还有你不能用printf之类的来测试返回的数据哈,会截断0以后的内容,
直接看*lpDataBuff这720字节的内存
dz08039 2006-05-23
  • 打赏
  • 举报
回复
LPBYTE我试过的,没有返回,现在有返回,但里面有0的话数据就会丢掉几个了.
jasonshark 2006-05-20
  • 打赏
  • 举报
回复
lpDataBuff在哪里声明的?贴出来看看哈
dz08039 2006-05-20
  • 打赏
  • 举报
回复
多谢两位,好象还是不行.CString s(tmp_string,720),会编译出错;memcpy(lpDataBuff,tmp_string,720);能通过但还是不能传递过去.
jasonshark 2006-05-20
  • 打赏
  • 举报
回复
memcpy(lpDataBuff,tmp_string,720);
YufengShi 2006-05-20
  • 打赏
  • 举报
回复
memcpy
hlidea 2006-05-20
  • 打赏
  • 举报
回复
用CString s(tmp_string,720);

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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