急!关于DLL(高分求解)

pfans 2001-12-14 10:14:50
我在DLL中定义:
extern "C"_declspec(dllexport) void myfun(char * buf);
在EXE中定义:
extern "C"_declspec(dllimport) void myfun(char * buf);
当我调用myfun(pbuf);后,
如果EXE中myfun(pbuf)的pbuf为字符串,可以在DLL中看到buf值传过来了,
但如果pbuf为二进制,就看不到buf值.
请问如何传二进制到中????
...全文
190 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
pfans 2001-12-14
  • 打赏
  • 举报
回复
CopyFromFile(pbuf)没有问题
wx_zzm 2001-12-14
  • 打赏
  • 举报
回复
可能CopyFromFile(pbuf)有问题
pfans 2001-12-14
  • 打赏
  • 举报
回复
没人理我???
pfans 2001-12-14
  • 打赏
  • 举报
回复
to Julienjut(秋水) :
我在SOCKET接收端收到的就是在dll中看到的那一块内存,但它的内容不正确,不是我在exe中调用YPL_SendString(pbuf)传给函数参数的内容,也就是说在exe中调用YPL_SendString时pbuf是一个内容,到dll中就变了,但我是要把exe中pbuf的内容传到dll中呀,所以才有YPL_SendString这个函数.然后dll再把这个内容通过发出去.
pfans 2001-12-14
  • 打赏
  • 举报
回复
可能我没说清楚,
我的意思是:
首先程序在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;

}
就运行不到断点处了,为什么???
ygangy 2001-12-14
  • 打赏
  • 举报
回复
楼上的说得有道理
Julienjut 2001-12-14
  • 打赏
  • 举报
回复
看没看到和发没发到是两回事
szk 2001-12-14
  • 打赏
  • 举报
回复
试一下memmove吧

The memcpy function copies count bytes of src to dest. If the source and destination overlap, this function does not ensure that the original source bytes in the overlapping region are copied before being overwritten. Use memmove to handle overlapping regions.

The memmove function copies count bytes of characters from src to dest. If some regions of the source area and the destination overlap, memmove ensures that the original source bytes in the overlapping region are copied before being overwritten
pfans 2001-12-14
  • 打赏
  • 举报
回复
UPUP
pfans 2001-12-14
  • 打赏
  • 举报
回复
我的在WIN2000下没有问题,但在WIN98下就是不行.
部分代码如下:
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;

}
大家帮我看看

jiagh 2001-12-14
  • 打赏
  • 举报
回复
在二进制串后加一个:NULL
TigerHu 2001-12-14
  • 打赏
  • 举报
回复
字副串在内存中也是二进制表示的,只不过>30H, 可以显示而以!
vckwz 2001-12-14
  • 打赏
  • 举报
回复
char *buf
你定义是char型吗!
肯定不可以吗!
换换类型定义就可以了!
hbs_biscuit 2001-12-14
  • 打赏
  • 举报
回复
详细一点好吗
三杯倒 2001-12-14
  • 打赏
  • 举报
回复
1111
三杯倒 2001-12-14
  • 打赏
  • 举报
回复
1111
三杯倒 2001-12-14
  • 打赏
  • 举报
回复
1111
dog_dog 2001-12-14
  • 打赏
  • 举报
回复
study
whool 2001-12-14
  • 打赏
  • 举报
回复
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;

}

16,551

社区成员

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

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

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