Consider this in a cpp file:
struct someStruct{
public:
extern "C" __declspec(dllexport) int sumup();
} someStruct;
extern "C" __declspec(dllexport) int someStruct::sumup()
{
return 0;
}
This does not compile: error: expected unqualified-id before string constant
Is it no possible to export a C++ member method with C linkage?
First off, linkage specifications don't apply to member functions; by [dcl.link]/4:
[...] A linkage-specification shall occur only in namespace scope (3.3). [...]
But there's even an example in the Standard that relates to your question somewhat, in the same paragraph:
[...] A C language linkage is ignored in determining the language linkage of the names of class members and the function type of class member functions. [Example:
extern "C" typedef void FUNC_c();
class C {
void mf1(FUNC_c*); // the name of the function mf1 and the member
// function’s type have C ++ language linkage; the
// parameter has type pointer to C function
FUNC_c mf2; // the name of the function mf2 and the member
// function’s type have C ++ language linkage
static FUNC_c* q; // the name of the data member q has C ++ language
// linkage and the data member’s type is pointer to
// C function
};
extern "C" {
class X {
void mf(); // the name of the function mf and the member
// function’s type have C ++ language linkage
void mf2(void(*)()); // the name of the function mf2 has C ++ language
// linkage; the parameter has type pointer to
// C function
}
};
— end example]
No. It doesn't work that way. It doesn't work at all. Can't do it. No way no how.