Eksportowanie funkcji języka C do użycia w plikach wykonywalnych języka C lub C++
Jeśli masz funkcje w bibliotekach DLL napisanych w języku C, możesz użyć makra preprocesora, aby ułatwić dostęp zarówno z języka C, jak i kodu języka C++. __cplusplus
Makro preprocesora wskazuje, który język jest kompilowany. Można go użyć do deklarowania funkcji za pomocą połączenia języka C po wywołaniu z kodu języka C++. Jeśli używasz tej techniki i udostępniasz pliki nagłówkowe dla biblioteki DLL, te funkcje mogą być używane przez użytkowników języka C i C++ bez zmian.
Poniższy kod przedstawia plik nagłówkowy, którego mogą używać zarówno aplikacje klienckie C, jak i C++:
// MyCFuncs.h
#ifdef __cplusplus
extern "C" { // only need to export C interface if
// used by C++ source code
#endif
__declspec( dllimport ) void MyCFunc();
__declspec( dllimport ) void AnotherCFunc();
#ifdef __cplusplus
}
#endif
Czasami może być konieczne połączenie funkcji języka C z plikiem wykonywalny języka C++, ale pliki nagłówka deklaracji funkcji nie używały powyższej techniki. Nadal można wywoływać funkcje z języka C++. W pliku źródłowym C++ opakuj dyrektywę #include
, aby zapobiec dekorowaniu nazw funkcji języka C przez kompilator:
extern "C" {
#include "MyCHeader.h"
}
Co chcesz zrobić?
Eksportowanie z biblioteki DLL przy użyciu polecenia
__declspec(dllexport)
Eksportowanie i importowanie przy użyciu polecenia
AFX_EXT_CLASS
Importowanie do aplikacji przy użyciu polecenia
__declspec(dllimport)