动态链接库之间怎样传递FILE指针?只有区区20分,大家请帮帮忙!!

vioy 2001-04-02 11:46:00
我在第一个DLL中初始化了一个FILE指针(不是CFile类),使用fprintf()可以向文件流中写入,当我调用第二个DLL中的一个函数时,将FILE指针作为参数传递给它,在这个函数中使用fprintf()向文件中写东西时(程序运行时)提示********内存区域不可访问,跟踪到fprintf()函数内部时,发现是在向数据流中写入数据前,将数据流加锁时出的错。

不知是动态链接库本身机制导致不能在两个动态链接库中同时打开FILE指针,并向其中写入数据?

不知这个问题有什么不需要改动太大的解决方法,既保持DLL接口不变。
...全文
1226 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vioy 2001-04-08
  • 打赏
  • 举报
回复
lwglucky:
设置共享内存用的是不是CreateFile()和OpenFile()函数,他们能得到HFILE句柄,能得到文件指针(FILE)吗?
vioy 2001-04-08
  • 打赏
  • 举报
回复
gongxy:
我按照你的方法做完后,链接时出了函数重定义,有什么办法不链接原来的库?
下面是错误的一部分:(还有其他的DLL也有这样的错误)
Linking...
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _atoi already defined in LIBCMTD.lib(atox.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtok already defined in LIBCMTD.lib(strtok.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fgets already defined in LIBCMTD.lib(fgets.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _atol already defined in LIBCMTD.lib(atox.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fprintf already defined in LIBCMTD.lib(fprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _malloc already defined in LIBCMTD.lib(dbgheap.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _atoi already defined in LIBCMTD.lib(atox.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _strtok already defined in LIBCMTD.lib(strtok.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _fgets already defined in LIBCMTD.lib(fgets.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _atol already defined in LIBCMTD.lib(atox.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _fprintf already defined in LIBCMTD.lib(fprintf.obj); second definition ignored
MSVCRTD.lib(MSVCRTD.dll) : warning LNK4006: _sprintf already defined in LIBCMTD.lib(sprintf.obj); second definition ignored
Creating library Debug/AceControlDLL.lib and object Debug/AceControlDLL.exp
LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library
../lib/AceControlDLL.dll : fatal error LNK1169: one or more multiply defined symbols found
gongxy 2001-04-07
  • 打赏
  • 举报
回复
VC
project
project settings
C/C++
Code Generation
Use run-time library
deubg ==> Debug Multithreaded DLL msvcrtd.dll
release ==> Multithreaded DLL msvcrt.dll

field 2001-04-06
  • 打赏
  • 举报
回复
什么都别想,门儿都没有!(我肯定)
不是我吓唬你,是不想你再浪费精力啦。
孩皮妞野 2001-04-06
  • 打赏
  • 举报
回复
look
lwglucky 2001-04-05
  • 打赏
  • 举报
回复
可以...设置共享内存...
vioy 2001-04-04
  • 打赏
  • 举报
回复
两个DLL是由同一个EXE调用的。
field说的是不是百分百确定?有没有什么办法比较少的改变代码完成功能?
gongxy的话没看懂,msvcrt.dll是干什么用的?
gongxy 2001-04-04
  • 打赏
  • 举报
回复
DLL & EXE all link with msvcrt.dll
vonvon 2001-04-04
  • 打赏
  • 举报
回复
关键就是两个动态链接库是否装入到了同一个进程的地址空间,如果是,
通过简单的函数间的参数传递就可以了
field 2001-04-04
  • 打赏
  • 举报
回复
我告诉你吧,DLL之间不能传递FILE指针。
你可以改用传文件名或其它方法,总之,传FILE指针的路不要再走了,
也不要浪费时间试了,快把分给我。
NowCan 2001-04-04
  • 打赏
  • 举报
回复
两个DLL是由同一个EXE调用的吗?

16,551

社区成员

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

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

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