我在用delphi写的dll中调用了ocx控件,dll的导出函数用到了widestring
Dll入口函数
procedure DLLEntryPoint(dwReason: DWord);stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
CoInitialize(NIL);
ICSeat:= CreateOleObject('ICC.IC_S') as IC_Seat;
end;
DLL_PROCESS_DETACH:
begin
CounInitialize;
end;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
end;
end; 两个导出函数
function Ding_Ring(DR_Port_Com: Smallint; DR_Num: Byte; DR_Time: Byte): Smallint; stdcall;
begin
result := ICSeat.Ding_Ring(DR_Port_Com, DR_Num, DR_Time);
//这句可以调用 但返回的时候出错 too many consecutive exceptions 'access violation at 0x.....
end;function Read_Card(RC_Port_Com: Smallint; var RC_Str_Card: WideString): Smallint; stdcall;
begin
result := ICSeat.Read_Card(RC_Port_Com, RC_Str_Card);
end;调用任何一个使用了ICSeat的导出函数都会出错
too many consecutive exceptions 'access violation at 0x.....原本怀疑是dll导出函数的参数用了string的原因
后 在dll的project文件及测试dll的exe文件都有调用SharMem(放在第一个),还是出错
请高手帮忙指点一下
Dll入口函数
procedure DLLEntryPoint(dwReason: DWord);stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
CoInitialize(NIL);
ICSeat:= CreateOleObject('ICC.IC_S') as IC_Seat;
end;
DLL_PROCESS_DETACH:
begin
CounInitialize;
end;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
end;
end; 两个导出函数
function Ding_Ring(DR_Port_Com: Smallint; DR_Num: Byte; DR_Time: Byte): Smallint; stdcall;
begin
result := ICSeat.Ding_Ring(DR_Port_Com, DR_Num, DR_Time);
//这句可以调用 但返回的时候出错 too many consecutive exceptions 'access violation at 0x.....
end;function Read_Card(RC_Port_Com: Smallint; var RC_Str_Card: WideString): Smallint; stdcall;
begin
result := ICSeat.Read_Card(RC_Port_Com, RC_Str_Card);
end;调用任何一个使用了ICSeat的导出函数都会出错
too many consecutive exceptions 'access violation at 0x.....原本怀疑是dll导出函数的参数用了string的原因
后 在dll的project文件及测试dll的exe文件都有调用SharMem(放在第一个),还是出错
请高手帮忙指点一下
解决方案 »
- 读取网页源文件,出现GIF89a
- 关于多线程的问题。
- 恭喜 sz_haitao 受奖励
- 关于EXCEL与ACCESS数据转换的问题
- 如何合并两个ClientDataSet的.data?
- 这么多人就不知道在delphi5.0下没有安装Excel,把dbgrid控件中的数据生成Excel文件吗?(求完整源代码送高分)
- 基础问题,紧急求援!
- 哪里有Installshield express教程或相关资料下载???
- fastreport控件的做统计问题??急急!!!
- 我用tdirctorylistbox做一个目录列表框, 但只能列一个驱动器的目录, 我想列出所有本地路径, 怎么办?
- 如何把b.exe附加到a.exe文件的后面
- 如何调用写字板程序打开一个文件文件后立即跳到预览界面?
砍掉,把输入输出的string类型都转换为PChar类型
而结束时调用ActiveX.OleUninitialize();
最好的方法是新建一个单元,把该单元放在工程引用的最前边,然后在该单元中加入初始化节
initialization
ActiveX.OleInitialize(nil);
finalization
ActiveX.OleUninitialize();
再运行程序试试
initialization
CoInitialize(nil);finalization
CoUninitialize;