VC 中 函数原形是 HANDLE JBLinkDevice(int iReaderPort);
D中我声明function JBLinkDevice(iReaderPort:Integer):THandle;stdcall;external 'SPTi2009.dll';
我想这样声明是没有问题的,然后调用的时候直接将1/2/3/4 赋值给iReaderPort。
问题就出来了,编译通过,运行的时候提示‘应用程序正常初始化(0xc0000005)失败’,然后iReaderPort 无论赋值是什么都返回同样的数据。
这是为什么
D中我声明function JBLinkDevice(iReaderPort:Integer):THandle;stdcall;external 'SPTi2009.dll';
我想这样声明是没有问题的,然后调用的时候直接将1/2/3/4 赋值给iReaderPort。
问题就出来了,编译通过,运行的时候提示‘应用程序正常初始化(0xc0000005)失败’,然后iReaderPort 无论赋值是什么都返回同样的数据。
这是为什么
解决方案 »
- 请教一个开发c/s程序的思路的问题,请指教
- 能否实现:让系统服务调用外部程序,并运行在指定的桌面上?
- 如何添加事件与删除事件?
- TQuery返回的字段类型信息如何区分numeric还是float?
- Delphi中哪个函数可以执行DOS命令,就像c中的system()
- 我有一张737*1123的位图,在windows98下用A4纸就能将它打印出来,到2000下A4纸却打印不下了,有什么办法在2000下将它打印出来而不影响画面质
- 关于动态数组的问题!!
- 删除记录失败
- 感动的流泪的电影呀 。
- 如何制作一个word模板,让delphi访问?
- Delphi 如何得到COM返回的参数?
- ADOQuery 自动计算的问题
这是我这声明的问题,还是DLL的问题。 (DLL在VC中能够正常调用)
HANDLE JBLinkDevice(int iReaderPort);
// 没有 WINAPI PASCAL __stdcall 之类的说明?那就应该是cdecl而不是stdcall另外也应该看看那个dll的导入表,是不是还需要什么其它的dll文件之类的
要一致
stdcall和cedcl参数的压站方式相反。所以会有问题。
另外,找个depend.exe(vs6.0)自带的一个dll导出函数查看工具,
看看dll是不是导出了你要调的那个函数
cdecl 与stdcall有什么区别吗??
这个DLL是在另外一个DLL基础上再次封装起来的。这两个DLL在 VC中都能成功的调用。
最主要的差别是,stdcall调用约定由callee清理stack中的传入参数,cdecl则由caller负责清理。这两个调用约定的入栈顺序都是由右向左,倒是没什么差别
这是哪儿的问题了。(都是些简单问题麻烦大家了)