调用DLL总报错 大家看看是怎么回事啊!(100)

Y

Yang.SZ

Unregistered / Unconfirmed
GUEST, unregistred user!
合作公司需要我们上传数据 用DLL做了个接口 我们把数据传给DLL DLL再把数据传到他们的服务器上 做完后给我发了个文档和DLL文件过来 可我把数据传过去总提示说: “错误信息:” 然后就是“faulted with message; 'access violation at 0x75b58f90:read of address 0x00030025'.” 什么什么的 大家看看是怎么回事啊 *******************************************************************************他们发的文档写的:门诊就诊信息录入Syntax:int ClinTreatInfoEntry(char* Jzh,, char* Jzrq, char* Hzxm,char* Jzks, char* Jzkszxbm, char* Jzys)Return(s) : 0 – Succuss-1 - FailureArguments:参数 参数 输入/输出 参数名 是否可空 类型 Jzh IN 就诊单据号 N VARCHAR(20) Jzrq IN 就诊日期 N YYYYMMDD Hzxm IN 患者姓名 N VARCHAR(20) Jzks IN 就诊科室(医院名称) N VARCHAR(60) Jzkszxbm IN 就诊科室(中心编码) N VARCHAR(20) Jzys IN 医师名称 N VARCHAR(20) 备注:就诊单据号:为His系统中能唯一标示本次就诊信息的单据号*******************************************************************************我的代码:var Form1: TForm1; Function ClinTreatInfoEntry(Jzh, Jzrq, Hzxm, Jzks, Jzkszxbm, Jzys: String): Integer; stdcall; External 'C:/Documents and Settings/Yang.SZ/桌面/接口文档/DLL.dll';implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin ClinTreatInfoEntry('12345678901234567890', '20100518', '王景涛', '妇产科', '0001', '刘化成');end;以前就是简单的应用过DLL但接触并不多 大家帮帮忙看看 是哪的问题啊 谢谢大家了
 
Function ClinTreatInfoEntry(Jzh, Jzrq, Hzxm, Jzks, Jzkszxbm, Jzys: String): Integer; stdcall; External 'C:/Documents and Settings/Yang.SZ/桌面/接口文档/DLL.dll';换成 Function ClinTreatInfoEntry(Jzh, Jzrq, Hzxm, Jzks, Jzkszxbm, Jzys: Pchar): Integer; stdcall; External 'C:/Documents and Settings/Yang.SZ/桌面/接口文档/DLL.dll';
 
DLL 不能直接用STRING
 
换成PCHAR了 可还是不好使啊 和以前的提示一样的
 
请确认DLL的声明和调用Dll的EXE中的声明一致
 
他给我发的文档中写的是Syntax:int ClinTreatInfoEntry(char* Jzh,, char* Jzrq, char* Hzxm,char* Jzks, char* Jzkszxbm, char* Jzys)Return(s) : 0 – Succuss-1 - FailureArguments:可我不可能按他这个声明吧??
 
声明用Function ClinTreatInfoEntry(Jzh, Jzrq, Hzxm, Jzks, Jzkszxbm, Jzys: Pchar): Integer; stdcall; External 'C:/Documents and Settings/Yang.SZ/桌面/接口文档/DLL.dll';调用时用ClinTreatInfoEntry(PChar('12345678901234567890'), PChar('20100518'), PChar('王景涛'), PChar('妇产科'), PChar('0001'), PChar('刘化成'));试试,还有问题的话就问问那家公司。可能是dll的问题。
 
晕死 还是不行 他们用 ClinTreatInfoEntry(char* Jzh,, char* Jzrq, char* Hzxm,char* Jzks, char* Jzkszxbm, char* Jzys) 这个写法是不是不规范啊?? 在程序里可以这么写吗??
 
在双方不能共同调试、而且集成又跨语言的话,用DLL风险是很大的调用应该是没有什么问题,最好能联调
 
换成动态调用LoadLibrary试试
 
我晕死了 他们那个好象是用C++开发的 我怕像bbinking说的那样 所以换了个没用传递值的过程 可怎么还是不行啊 *******************************************************************************他们给的文档:动态链接库出初始化函数syntax: int InitDLL( )Arguments: none;Return(s): 0 - SUCCESS -1 - FAILURERemarks; 应用起动时,必须调用此函数对DLL所用到的资源进行初始化,以便分配相关句柄.********************************************************************************我的代码如下:var Form1: TForm1; Function InitDLL(): Integer; stdcall; External 'C:/Documents and Settings/Yang.SZ/桌面/接口文档/我的接口/DLL.dll';implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin InitDLL();end;********************************************************************************我想了半天 我的写法应该没有问题吧 以前以为是传递值的问题 可现在都没用传递值了 怎么还会不好使呢 而且。。 我如果点BUTTON的话 会提示:“信息错误:初始化资源失败” 然后提示一内存错误 可如果不点BUTTON 什么都不动 打开界画就退出也会 提示一内存错误 这个初始化资源失败的提示应该是他DLL里面写的代码吧 那是不是意味着我连的没问题啊 可为什么又会提示什么内存错误呢 这个内存错误应该是没有成功连接才会出的提示吧 这到底是怎么回事啊 哪位大侠来帮帮忙吧 要疯了
 
早跟你说了,找他们吧。还有,你的DLL.dll为什么放在那么个地方?主文件名也叫Dll?看上去就是业余选手干的事,把它改个名,再放到你的项目文件夹里,这样代码也简洁些。Function InitDLL(): Integer; stdcall; External 'Test.dll';
 
唉 他们传来的就是DLL.dll 我的工程文件就是在这个文件夹里的 但是怕相对路径不好使才改成这种绝对路径的 没办法了 看来真的是他们的问题了 到时候他们那边肯定还得扯皮 所以我才不愿意搞这种联合开发嘛 费事费时还费力 最后弄不好还得是干到一半了再来个不欢而散 算了 谢谢大家了 反正我现在是确定不是我这边的问题就行了
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
645
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部