char *buf
你定义是char型吗!
肯定不可以吗!
换换类型定义就可以了!
你定义是char型吗!
肯定不可以吗!
换换类型定义就可以了!
解决方案 »
- 大数据处理问题,本人新手,望请大神赐教!!!
- MFC在Release下总是奇怪的报错,
- VC++ 6.0 和USB的通信 我用SetupDiEnumDeviceInterfaces函数来获取USB设备总是返回失败?
- windows程序设计 纯C + WIN32 API设计方式 群:27830518
- 如何用sdk方式制作一个基于对话框的程序
- 我想问一些关于windows编程的基本问题。欢迎高手过来作答,谢谢。
- 大数运算
- 各位大侠,救助搜索法五子棋算法
- 一碟小菜。。。
- 我想交几位学VC的朋友,共同学习
- ×***求助高手***提取系统字体名称,然后将名称写入INI文件中
- 程序员藏书大调查!!你书架上最厚的砖头!!!!
部分代码如下:
DLL文件中:
extern "C"_declspec(dllexport) void YPL_SendString(char strSend[DEFAULT_BUFFER],int iIndex)
{ memcpy(g_package[iIndex].WBuf ,strSend,DEFAULT_BUFFER);
//sreSend在内存中不对但地址和EXE中pbuf一样(pbuf)见下面
SetEvent(g_package[iIndex].hWEvent);
}
EXE文件中:
extern "C"_declspec(dllimport) void YPL_SendString(char strSend[DEFAULT_BUFFER],int iIndex);HRESULT CYPL_FTPServerDlg::OnReaded (WPARAM wParam,LPARAM lParam)
{ char * pbuf; pbuf=(char *)malloc(DEFAULT_BUFFER); CopyFromFile(pbuf);//在这里将二进制拷到pbuf,在内存中可以看到是对的
YPL_SendString(pbuf,(int)wParam); free(pbuf); return 0;}
大家帮我看看
我的意思是:
首先程序在win2000下运行正常,在win98下出现问题.
在EXE中YPL_SendString(pbuf,i);此时pbuf在内存中看到的是正确的内容.
这样在DLL中YPL_SendString传进来的pbuf在内存中看到的内容就不正确了,请问是谁该了内存??
而且有时我在dll的YPL_SendString函数中设置断点,
如果CYPL_FTPServerDlg::OnReaded 函数如下的话
HRESULT CYPL_FTPServerDlg::OnReaded (WPARAM wParam,LPARAM lParam)
{char * pbuf;pbuf=(char *)malloc(DEFAULT_BUFFER);CopyFromFile(pbuf);//在这里将二进制拷到pbuf,在内存中可以看到是对的
YPL_SendString(pbuf,(int)wParam);free(pbuf);return 0;}
但程序可以运行到断点处,
但如果改成
HRESULT CYPL_FTPServerDlg::OnReaded (WPARAM wParam,LPARAM lParam)
{char * pbuf;char * ptemp;
pbuf=(char *)malloc(DEFAULT_BUFFER);
ptemp(char *)malloc(DEFAULT_BUFFER);
CopyFromFile(pbuf);//在这里将二进制拷到pbuf,在内存中可以看到是对的
int len;
//len 通过其他方式得到,其值<=DEFAULT_BUFFER
memcpy(ptemp,pbuf,len);
YPL_SendString(ptemp,(int)wParam);free(pbuf);return 0;}
就运行不到断点处了,为什么???
我在SOCKET接收端收到的就是在dll中看到的那一块内存,但它的内容不正确,不是我在exe中调用YPL_SendString(pbuf)传给函数参数的内容,也就是说在exe中调用YPL_SendString时pbuf是一个内容,到dll中就变了,但我是要把exe中pbuf的内容传到dll中呀,所以才有YPL_SendString这个函数.然后dll再把这个内容通过发出去.
extern "C"_declspec(dllexport) void YPL_SendString(char* strSend,int iIndex)
{memcpy(g_package[iIndex].WBuf ,strSend,DEFAULT_BUFFER);
//sreSend在内存中不对但地址和EXE中pbuf一样(pbuf)见下面
SetEvent(g_package[iIndex].hWEvent);
}
EXE文件中:
extern "C"_declspec(dllimport) void YPL_SendString(char *strSend,int iIndex);HRESULT CYPL_FTPServerDlg::OnReaded (WPARAM wParam,LPARAM lParam)
{char * pbuf;
try the following code
pbuf=new char[DEFAULT_BUFFER];CopyFromFile(pbuf);//在这里将二进制拷到pbuf,在内存中可以看到是对的
YPL_SendString(pbuf,(int)wParam);delete []pbuf
;return 0;}