VC 中 函数原形是 HANDLE JBLinkDevice(int iReaderPort);
D中我声明function JBLinkDevice(iReaderPort:Integer):THandle;stdcall;external 'SPTi2009.dll';
我想这样声明是没有问题的,然后调用的时候直接将1/2/3/4 赋值给iReaderPort。
问题就出来了,编译通过,运行的时候提示‘应用程序正常初始化(0xc0000005)失败’,然后iReaderPort 无论赋值是什么都返回同样的数据。
这是为什么

解决方案 »

  1.   

    补充一句:整个就一个调用function JBLinkDevice(iReaderPort:Integer):THandle  这一个函数,别的什么都没有。
    这是我这声明的问题,还是DLL的问题。 (DLL在VC中能够正常调用)
      

  2.   

    应该是VC dll的问题,有没有VC调用的例子可以正常通过的?
      

  3.   

    难道 VC dll是 Debug的?
      

  4.   


    HANDLE JBLinkDevice(int iReaderPort);
    // 没有 WINAPI PASCAL __stdcall 之类的说明?那就应该是cdecl而不是stdcall另外也应该看看那个dll的导入表,是不是还需要什么其它的dll文件之类的
      

  5.   

    VC导出的调用约定是stdcall还是cedcl呢?
    要一致
      

  6.   

    写dll不管是c还是delphi都写成stdcall就对了。
    stdcall和cedcl参数的压站方式相反。所以会有问题。
    另外,找个depend.exe(vs6.0)自带的一个dll导出函数查看工具,
    看看dll是不是导出了你要调的那个函数
      

  7.   

    没有 WINAPI PASCAL __stdcall 之类的说明。
    cdecl 与stdcall有什么区别吗??
    这个DLL是在另外一个DLL基础上再次封装起来的。这两个DLL在 VC中都能成功的调用。
      

  8.   

    区别不小,只不过都是编译器默默的完成了
    最主要的差别是,stdcall调用约定由callee清理stack中的传入参数,cdecl则由caller负责清理。这两个调用约定的入栈顺序都是由右向左,倒是没什么差别
      

  9.   

    郁闷,用原有的DLL试验了下,虽然返回很正常了,但是 ‘应用程序正常初始化(0xc0000005)失败’ 还是有。而且直接点击Project1.exe 不仅会有这个提示,而且还直接关闭程序了。
    这是哪儿的问题了。(都是些简单问题麻烦大家了)