我制作了一个库,如果用c++语言写的话,声名输出函数必须前面加上extern"c" ,而用C语言写库的话,就没有这个问题,写出来的库能被C或c++程序使用。请问各位高手原因~~~~~~~~~~~

解决方案 »

  1.   

    默认c++编译器会对名字作修饰,有诸如@YAH,主要包括参数的类型和参数大小的信息。其中一个重要的原因就是重载函数,如果两个重载函数都需要导出,那么就要用修饰名来区分了。
    关于具体原因参照《核心编程》,网上关于修饰名的介绍也很多。
      

  2.   

    谢谢楼上的朋友,不过你说的问题我也知道,通过加上extern "C"是为了使编译器对函数的编译采用C方式,但是不添加为什么不行呢?不能采用C++方式么?
      

  3.   

    如果你的客户端,就是倒入dll的应用程序不用c++方式调用的话,那么就找不到这个函数了
    你能保证你的客户一定是用c++编译吗
    如果它是vb的应用程序呢??所以在dll里面,加上extern"c"