之前以为没有extern "C",编译的函数名称会加上修饰符。比如Func()函数,如果有extern "C"的话,导出Func,在delphi中动态调用能够成功;没有extern "C",函数名称加上修饰符,再像之前那样导出Func就不行了。结果试验后发现动态调用dll的Func函数仍然成功,所以不知道extern "C"到底作用是什么?

解决方案 »

  1.   

    extern "C"是指按C语言方式,而不是C++方式(C++支持重载)被其他文件引用
      

  2.   

    extern "C"不对函数进行修饰,所以按原始函数名调用就可以,如果没加, C++会对名字加很多前缀
      

  3.   

    加extern "C" 或者用def文件是防止发生 名字改编  的常用方法
      

  4.   

    使用VC编写dll实验,发现如果没有重载函数的话,有没有extern "C"或者_stdcall等,用def导出的函数都没有任何修饰;如果有函数重载,函数名进行修饰,加extern "C"或_stdcall和不加extern "C"或者_stdcall就有差别了。