我在DELPHI中调用用vc++的动态连接向导创建的动态连接库库,能够正常调用,但是我在退出我的dephi程序时,会异常,抱"Exception EAccessViolation in module 我的.exe at 00000000,read address of 00000000"错误
 在 VC 中 extern "C" _declspec(dllexport) int ChanelSum( void )//DLLexport
 在DELPHI中也是用 CDECL方式调用,

解决方案 »

  1.   

    写DEF文件试试,我以前也碰到过,最后通过写DEF文件解决的
      

  2.   

    你把_declspec改为__stdcall看看,再写个DEF,用*.lib连接应该没有问题了
      

  3.   

    2.4 Delphi 调用32 位动态库方法
    语法:
    [Public Private | protected] Function FunctionName([Var] [Arg1:DataType1;]
    [Arg2:DataType2;...]) [:ReturnDataType]; far;stdcall;external ‘libname libname’ [Name
    AliasName];
    调用语句的语法包含下面部分:
    关键字Public 可选的。表示函数可以被程序代码中的任意部分访问。
    关键字Private 可选的。表示函数在声明类的单元(源代码)外不能访问。
    关键字Protected 可选的。部分地表示保护函数,保护元素只能被当前类和它的子类访问。
    关键字Function 必需的。表示调用函数,函数有返回值。
    FunctionName 必需的。调用外部函数的名称,区分大小写。
    关键字Var 可选的。表示通过引用传递参数。函数参数可以用值传递增,也可以通过引用传递。通过引用传传递参数,就意味着它的值没被复制到存放函数例程参数的堆栈中,避免复制就意味着程序执行速度加快了。通过引用传值,这将允许过程和函数改变参数的值。
    ArgN:DataTypeN 可选的。参数名以及参数类型,传递的参数类型可以是:Shorint,Smallint,Longint,Integer(16/32),Single,Double,Extended,Currency,Date,Pchar,Object,Variant 等。
    ReturnType 可选的。表示函数返回值的类型。
    Stdcall 必需的。表示传递约定,这样调用模块(应用程序),与被调用模块(DLL)就使用相同的参数约定。
    关键字external 必需的。声明访问外部函数。
    Libname 必需的。访问的DLL 名称,16 位Delphi 中外部声明不带扩展名的库名。
    Name ‘AliasName’ 可选的。Name 指令可以为外部函数起别名,避免与系统例程和函
    数名相冲突。
    外部程序调用的DLL 函数,必须遵照下列规则:
    a. 必须列在DLL 的exports 子句中。
    b. 在Delphi3 中,调用函数还需被声明为stdcall,来使用标准的WIN32 参数传递技
    术。代替优化的register 参数传递技术。
    c. 在WIN32 中,DLL 可以使用全局数据,该数据将不会通过调用应用程序来分享,每
    当应用程序装载DLL 时,它在自己的地址空间中存储着DLL 的全局数据。
      

  4.   

    extern "C" _declspec(dllexport) WINAPI int ChanelSum( void )//DLLexport
    加上个调用约定~
      

  5.   

    1  怎么写def文件,我用动态库向导创建的他不是本身就有一个吗,2  extern "C" _declspec(dllexport) WINAPI int ChanelSum( void )//DLLexport
    加上个调用约定~ 方式在我刚开始调用的时候就会报
     “ read address of 00000000”
      

  6.   

    _declspec(dllexport)
    改成__declspec(dllexport)呢?
      

  7.   

    http://www.csdn.net/expert/topic/1034/1034807.xml?temp=.1917078
      

  8.   

    .DEF文件格式LIBRARY   BTREE
    DESCRIPTION "Implements a binary tree."
    EXPORTS
       Insert   @1
       Delete   @2
       Member   @3
       Min   @4
      

  9.   

    _declspec(dllexport)
    改成__declspec(dllexport)呢?
     会在DELPHI退出来的时候报 cpu错误 77f9f9eo ret,紧接着下一行是  ntdll.dbgusserbreakpoint
     这个原因好象是我本来用单步调试vc的时候,他会报ntdll.dll 异常,但是也能正常执行下去
      

  10.   

    你再检查一下,应该不是DLL的问题,
    还有你最好FREEL
      

  11.   

    如果是函数执行过程中是正确的,而函数返回时错误,很有可能是函数入口参数错误,因为返回时要将入口参数压堆栈弹出如果是程序结束时错误,你就看看你的DLL函数里面是否有错误了。
     把里面所以执行全部删除,试试