api.h で
typedef void* hidden_my_type;
void do_something(my_type x);
core.c で
struct _my_type
{
int a;
}
void do_something(hidden_my_type void_x)
{
struct *_my_type x = void_x; /*Don't understand is that correct way to do, as I'm getting segmentation fault error */
printf("Value: %d\n", x->a);
}
別の方法として、
struct *_my_type x = (struct _my_type *)malloc(sizeof(struct _my_type));
void_x = x
printf(Value: %d\n", x->a);
しかし、それでも seg-fault エラーが発生します。
さて、これが void* の問題です....
例えばcore.cで
void init_my_type(hidden_my_type a)
{
my_type *the_a = malloc(...);
a = the_a // <<<<<<<<<<<<<<<<<<<<<<<<<<<< is this correct?! a is void* and the_a // is original type
pthread_cond_init(&the_a->...);
.. (in short any other methods for init ..)
}
void my_type_destroy(my_hidden_type x)
{
my_type *the_x = x;
pthread_detroy(&the_x-> ...);
}
main.c で
test()
{
my_hidden_type x;
init_my_type(x);
....
my_type_detroy(x);
}
これ自体は失敗するはずです。main.c テスト関数のように、x は void* です ... init は割り当てますが、destroy では再び void* を渡します .. これは何でもかまいません!
編集(私のために解決)
api.h で
typedef void* hidden_my_type;
void do_something(my_type x);
core.c で
struct _my_type
{
int a;
}
void init_hidden_type(hidden_my_type void_p_my_type)
{
struct _my_type *real_my_type = (struct _my_type *)malloc(sizeof(struct _my_type));
//--- Do init for your type ---
void_p_my_type = real_my_type;
}
void do_something(hidden_my_type void_x)
{
struct *_my_type x = void_x;
printf("Value: %d\n", x->a);
}