轉自:http://blog.csdn.net/life_is_too_hard/article/details/52137271
c和c++不能直接相互調用,主要是因為c++有重載函數的功能,為了區分重載函數,編譯器會在函數名上加上一些修飾用符號,而c不這么做。為了讓c與c++的程序能夠相互調用對方的庫,就有了extern “C”。注意,extern “C” 是c++的規范,所以只能出現在c++的代碼里面,加在函數聲明前,表示函數是用c的規范。
1.c代碼調用c++dll
編譯c++dll的要點
- 供c調用的c++的函數接口不能包含c++特有的東西。
- 在編譯生成供c代碼調用的dll時,頭文件的中的函數聲明前要加上extern “C” 告訴編譯器按照c規范處理函數名。
- 編譯完成后,提供給c使用的頭文件里面不能包含extern “C”,可以使用宏開關解決,也可以重新寫個頭文件。
c代碼調用c++dll的要點
- 和正常調用c函數一樣
2.c++調用c語言dll
編譯c預言 dll的要點
- c語言dll正常編寫,不需要做額外處理
c++調用c語言dll的要點
- 在包含c的頭文件或聲明來自c的函數時需要加上extern "C", 建議這么做
總結,不管誰調用誰,c代碼不需要特殊處理,只要在c++代碼的正確位置加上extern ”C" 即可。