خوب اگر به صورت c++ قصد دارید expoert کنید مشکلی وجود نداره ولی اگر به صورت ansi c قصد دارید همچین کاری انجام بدید ، امکانش نیست بجز اینکه دو تا متد برای سازنده و مخرب بسازید و سمت کلاینت یا همون فایل اجرایی به قول خودتون ازش std::shared_ptr بسازید:
//server side
extern "C"{
Foo* createObject(){
return new Foo;
}
void freeObject(Foo* foo){
delete foo;
}
}
//client side
std::shared_ptr foo(createObject(),freeObject);