请教各位大虾,怎么在DLL中添加写日志的java如何记录接口日志函数

关闭DLL时出现非法操作!各位大虾进来看看吧.
Description of your first forum.
24 篇帖子 & 分页:1 / 2 &
由 eastnet & 星期四, 日 09:50
我的DLL(PrintWrit.dll)是这样写的:
library PrintW
{ Important note about DLL memory management: ShareMem must be the
&using PChar or ShortString parameters. }
&ShareMem,//用了sharemem也一样报错
&SysUtils,
&U_DM in 'U_DM.pas' {DM: TDataModule},
&PubUnit in 'PubUnit.pas',
&RMRepS in 'RMRepS.pas' {RMRepSrc},
&Unit3 in 'Unit3.pas' {Form3},
&ReadPic in 'ReadPic.pas' {Frm_ReadPic};
& &PrintW;
{$R *.res}
//---------------以下是PubUnt.pas-------------------
& Windows,
&procedure PrintW(H: THremotedbconn,writsort,filecode,other:string);
procedure PrintW(H: THremotedbconn,writsort,filecode,other:string);
& &Application.Handle := H;
& &DM:=TDM.Create(Application);
& &RMRepSrc:=TRMRepSrc.Create(Application);
& &Form3:=TForm3.Create(Application);
& &Query:=TADOQuery.Create(Application);
& &Query.Connection:=DM.
& &subquery:=TADOQuery.Create(Application);
& &subquery.Connection:=DM.
& &.....................
& &Query.F
& &subquery.F
& &DM.conn.C
& &RMRepSrc.F
& &Form3.F
--------------------------------------------------------------------------------
然后我在pfiles中调用PrintWrit.dll的PrintW:
procedure TfrmPrnFiles.FormCreate(Sender: TObject);
&remotedbconn:='Provider=MSDASQL.1;Driver={Microsoft Access Driver (*.mdb)};DBQ=data\cssems.user name=;password=;threads=10;maxbuffersize=4096';
&lLibHandle := LoadLibrary ('PrintWrit.dll');
&if lLibHandle = HINSTANCE_ERROR then
& & raise EDLLLoadError.Create('Unable to Load DLL');
....................................
procedure TfrmPrnFiles.Button1Click(Sender: TObject);
&//现场检查笔录打印
& PrintW(Application.Handle,remotedbconn,'writ1',callfcode(IsEmpWrt),'0');
(lLibHandle);
-------------------------------------------------------------------------------
DLL可以使用可在在关闭DLL时有时会弹出错误:
&0x指令引用的0x内存,该内存不能为read&
(注我用了ShareMem也不行)
在调试时有弹出这样的错误:
&Project Pfiles.exe raised exception class EOSError with message'System Error.
Code:1400.
无效的窗口句柄.'.Process stopped.Use Step or Run to continue.&
请大家帮我看看是哪的错,谢谢了!!!!!
由 hansion3406 & 星期四, 日 10:04
不懂..看看..
由 电猛LimIt & 星期四, 日 10:25
兄弟,要用PCHAR类型啊,用STRING不行
由 hansion3406 & 星期四, 日 10:26
他有加SHAREMEM的...
由 eastnet & 星期四, 日 10:40
用了SHAREMEM也一样不行.
由 LargeWang & 星期四, 日 10:42
没处理 ExitProc
由 wlmmlw & 星期四, 日 10:47
单步调试,尤其要注意在资源释放时的代码.
由 LargeWang & 星期四, 日 11:07
怎么没有输出函数的申明
由 游来游去 & 星期四, 日 11:17
前几天,我这里也发生过类似问题,解决问题的主要办法是删除DLL中一些不必要的控件,这和DLL的机制有关系. DLL原本中是函数级的东东,在理论上是支持窗体的,不过写的过程中一定小心,不多余的外部控制不要加.
由 eastnet & 星期四, 日 11:19
输出函数在pfiles中申明了:procedure &PrintW(H: THremotedbconn,writsort,filecode,other:string); external 'PrintWrit.dll';
由 eastnet & 星期四, 日 11:25
我只用了一个第三方控件ReportMachine3.0,这个控件很多人都在用,应该不会有问题的.
由 yanfei0891_first & 星期四, 日 11:28
如果你的dll中用到了com对象,如 adoconnection等,
需要在在initialization中加上CoInitialize(nil)
initialization
& CoInitialize(nil);
应该可以解决你的问题,但我建议你的dll里最好不要放conneciton,从主程序传入
connection对象应该是最好的。还有dll释放前最好将全部的query.active :=
我现在正在做一个关于dll插件的一套组件,但也碰到了一些问题,唉。。。
由 游来游去 & 星期四, 日 11:29
不要对自己太有信了,你可以试写一个最简单的例子,这样的调用是决对没问题的.控件很多人用不能表明它没有问题,1class和RX这样控件用的人不少吧,BUG就不少.
由 hansion3406 & 星期四, 日 16:26
顶一下...别让它给沉
由 dirk & 星期四, 日 16:45
这样的代码,除非作者,逐行调试源码,其他人是很难看看就把问题看出的。
给个建议:新建个dll project,把代码模块一块块添加进去(DM、RMRepSrc、Form3……),运行,关闭,直到某个模块加入后关闭出现错误,然后再进一步调试这个模块,直到找到错误。
另外,是否是第三方控件的问题很难说,用的多的控件并非不会有bug,更何况rm本身也用了大量的第三方控件。
ShareMem在主调程序中也应该在dpr的uses的第一行。
问题的方向应该还是资源释放的问题,创建的对象或指针没有释放,另外看看有没有使用线程(自己的代码和第三方控件中的代码),退出dll时,如果线程没有被适当的结束,很容易出错。
24 篇帖子 & 分页:1 / 2 &}

我要回帖

更多关于 接口调用日志表设计 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信