Q1:extern “C” 是做什么用的?
A1:一種情況是多個文件中,變量聲明或者函數聲明,需要extern “C”,這種情況在這里不做討論。
在dll工程中,被extern "C"修飾的變量和
函數是按照C語言方式編譯和連接的,即把C++的函數用C這個方言表述出來,已達到C能看懂的目的。
Q2:C語言調用C++的dll,應該注意什么?
A2: 如extern“C”里面說的那樣,如果C++編寫的函數放在dll里面,不被extern“C”修飾的話,被C調用時,則C不認識,所以在C++工程里面聲明時,要加extern“C”修飾,就像:
extern "C" __declspec(dllexport) void IMVL_LoadModel(const char* model_filename, svm_model* model); extern "C" __declspec(dllexport) void IMVL_Train(const char* data_filename, svm_model* model); extern "C" __declspec(dllexport) void IMVL_Predict(svm_model* model, const double* problem, int DimNum, double* level);
但是在調用時,則不需要extern“C”來修飾,參看下面網友的回復:
為了使c能調用c++寫的dll。c++中使用extern "C"{ }修飾該接口即可 這個原因你應該知道吧。大概意思是告訴c++編譯器這段代碼用c編譯器編譯。編譯之后的結果是c方式的而不是c++方式的。 但是c中不識別extern "C"。 綜上兩點,在dll頭文件中常這樣寫,如下: 意思就是編譯的時候編譯成c方式。但是包含頭文件時,因為是c調用所以會忽略掉extern "C" #ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif
Q3:C++調用C工程的dll,應該注意什么?
A3:暫時沒什么好注意的。
Q4:
A4: