5555来人哪,救命啊。。。

sue3140 2010-06-12 10:17:38
继续昨天的问题,哎。。心力交瘁,老板不管,自己搞定!还是那个读文件的问题。
我一个读的函数,昨天已经发布过了,其中调用了自己写的一个dll里面的函数,传递的参数是stringlist
例如dll的h里面
extern "C" __declspec(dllexport) int __stdcall ReadOneFromFile(TStringList *myList0[],TStringList *myList1[],String myDir);
通过这个函数来读文件,并将文件的内容保存到myList里面,返回。
首先,我在我的读取工程里面运行,读了一次能完全读不报错,再读一次(exe不关闭,继续打开、读)就在dll的一个函数的fp=fopen(FileName, "r"));这句报Access violation 。。。省略字
然后,我就打开dll的工程,设定宿主程序为刚刚的exe,完了运行,读了一遍文件,能读出来,但是我关闭文件时报错,Access violation 。。。省略字
当然了,我不关闭文件接着读第二次还是在fp=fopen(FileName, "r"));这句报错!

自我总结,不知道是动态链接库哪边有问题。。。是参数传递的问题?还是什么。。。
纠结啊。。
大侠们,帮帮我吧。。
要过节了。。。
谢谢啦。。。
...全文
160 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sue3140 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 fxworld 的回复:]

是的,原则上讲只要你的dll中使用了vcl里的类型变量,那么调用dll的模块以及dll模块都必须把那个选项勾上。
[/Quote]
嗯。。。 了解了! 谢谢!~~
结贴!
fxworld 2010-06-13
  • 打赏
  • 举报
回复
是的,原则上讲只要你的dll中使用了vcl里的类型变量,那么调用dll的模块以及dll模块都必须把那个选项勾上。
sue3140 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fxworld 的回复:]

更正:

//--------------------------------------------------------
没有打勾的话,就能识别vcl中的一部分已经注册的类型,c,c++的标准类型。
//----------------------------------------------------------

没有打勾的话,就只能识别vcl……
[/Quote]
你好,那是不是我只要用了vcl 中的数据类型,就必须把勾选项勾上,不然运行总有问题?
ccrun.com 2010-06-12
  • 打赏
  • 举报
回复
为什么不用char *做参数呢。
ccrun.com 2010-06-12
  • 打赏
  • 举报
回复
你这myCurrenDir不还是String类型的变量吗?
sue3140 2010-06-12
  • 打赏
  • 举报
回复
我把所有的ansistring都去掉了 out of memory 已经没有了
现在是codeguard 提示的Access Overrun 错误。。。
我这个dll 编的太烂了!~~~
void ReadTypeFromFile(String myCurrenDir,int *n)
{
char miTempChar[100]="";
char FileName[100]="";
strcpy(FileName,myCurrenDir.c_str()); //这句出错
}
sue3140 2010-06-12
  • 打赏
  • 举报
回复
char miTempChar[50];
myTitleList[j]->Add(AnsiString(miTempChar));
刚那个fclose 貌似没了
现在的问题是 每次运行程序的时候 会在有AnsiString的地方出现EOutOfMemory 这个错误
每次出的位置不一样 但都在有AnsiString的地方..
ccrun.com 2010-06-12
  • 打赏
  • 举报
回复
大部分VCL类的对象指针做参数还是可以的。只是把String做参数不太感冒。
Waiting4you 2010-06-12
  • 打赏
  • 举报
回复
唉,偶是不太敢在DLL里直接传String,TStringList这类东东的.
sue3140 2010-06-12
  • 打赏
  • 举报
回复
刚用了codeguard 说我resource leak
the file handle ()was never closed
我看了 我每一个函数里面 都是一个fopen 对应一个fclose
这样难得还不够关闭handle的?
sue3140 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zzbinfo 的回复:]

看了你原来的那个帖子,没有仔细看,代码太长,呵呵。这个错误不要想的太复杂,我注意到你昨天的代码里面有很多的new 就是TStringList *myList0[]声明这个的时候,我决的你可以从这部分入手查错。还有就是这个参数的传递,你一定要在调用这个函数之前new TStringList,不要在函数里面new。希望你早点找到问题所在。
[/Quote]
在我的dll里面 就没有涉及到new 和delete的问题
只有对文件的操作,fopen fclose fscanf等等
zzbinfo 2010-06-12
  • 打赏
  • 举报
回复
看了你原来的那个帖子,没有仔细看,代码太长,呵呵。这个错误不要想的太复杂,我注意到你昨天的代码里面有很多的new 就是TStringList *myList0[]声明这个的时候,我决的你可以从这部分入手查错。还有就是这个参数的传递,你一定要在调用这个函数之前new TStringList,不要在函数里面new。希望你早点找到问题所在。
周药师 2010-06-12
  • 打赏
  • 举报
回复

难猜;
检测是否访问了野指针?
fxworld 2010-06-12
  • 打赏
  • 举报
回复
更正:

//--------------------------------------------------------
没有打勾的话,就能识别vcl中的一部分已经注册的类型,c,c++的标准类型。
//----------------------------------------------------------

没有打勾的话,就只能识别vcl中的一部分已经注册的类型,c,c++的标准类型。
fxworld 2010-06-12
  • 打赏
  • 举报
回复

把那个勾选上了就没事了,就是因为这时你的程序和dll自动调用了bcb自带的类型识别库,所以可以正确识别vcl 中的数据类型,比如:String,TStrings...等。

没有打勾的话,就能识别vcl中的一部分已经注册的类型,c,c++的标准类型。
sue3140 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 fxworld 的回复:]
//---------------------------------------------------------
我把build with run time package选项勾上了 确实可以运行了。。。
请问大哥,为什么呀?
那我想把软件发布给客户用的话, 应该怎么来发布呢?
//---------------------------------------------------……
[/Quote]
谢谢!
呃。。我可不可以请问下,我之前出了那么多错误,就把那个勾选上了就没事了。。为什么呢?
fxworld 2010-06-12
  • 打赏
  • 举报
回复

//---------------------------------------------------------
我把build with run time package选项勾上了 确实可以运行了。。。
请问大哥,为什么呀?
那我想把软件发布给客户用的话, 应该怎么来发布呢?
//----------------------------------------------------------

run time package 是bcb自带的运行库包,包含了运行时的类型识别,除非你能全部以“静态链接库”的方式加到你的程序中,否则必须一个一个的拷贝到你的程序能搜索到的地方。

1、 最笨的办法,把程序拷贝到没有开发环境的系统下,运行后会提示您缺少哪个文件,然后您一个一个的拷贝过去,这个比较累。

2、使用bcb自带的 Tdump.exe 在命令行下执行: tdump /? 看下如何使用。

3、用第三方工具,比如:View dependencies ,下载地址记不住了 ,你在网上搜索一下,这个比较好用些。






xiaobin80 2010-06-12
  • 打赏
  • 举报
回复
if((file = fopen(tempChar, "rb")) == NULL){
file = fopen(tempChar, "wb+");

... ...

}

这是我写的关于fopen的使用,在dll(ATL)中正常!
sue3140 2010-06-12
  • 打赏
  • 举报
回复
问题是 我还从来没有打包过程序。。
谁帮忙发个用bcb自带的install shield打包的过程链接给我看看啊。。。

多谢 多谢
我用的bcb5
sue3140 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zzbinfo 的回复:]

看来我眼花回答错了
[/Quote] (*^__^*) 嘻嘻……
这些别人做的东西,在csdn上也只是希望大家提出一些解决问题的方法
挺感动的,大家帮忙的感觉!
呃。。 现在的问题是 我这个程序想打包的话,我要加哪些? 有table 肯定要加BDE的,现在又有build with runtime package勾选项。。 哎。。。
加载更多回复(4)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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