Selamün Aleyküm;
İnternette bir C++ örneği gördüm ve onu denemek istedim. Örnekte fonksiyonları stdcall olarak ayarlıyordu. Daha sonra derliyor. stdcall'u şu şekilde kullanıyorum:
#ifndef CPPWRAPPER_H
#define CPPWRAPPER_H
#ifdef __cplusplus
#include "example.h"
typedef Example* ExampleHandle;
# define EXPORTCALL __attribute__((stdcall))
#else
typedef struct Example ExampleHandle;
# define EXPORTCALL
#endif
#ifdef __cplusplus
extern "C"
{
#endif
ExampleHandle EXPORTCALL init_Example();
ExampleHandle EXPORTCALL init_Example(const char* str);
const char* EXPORTCALL get_str_Example(ExampleHandle obj);
#ifdef __cplusplus
}
#endif
#endif // CPPWRAPPER_H
Lakin derlemeye çalıştığımda ise stdcall'u yok sayıyor:
Alıntı:
cppwrapper.h:17: warning: ‘stdcall’ attribute ignored [-Wattributes]
ExampleHandle EXPORTCALL init_Example();
^
'NOT : Bu alttaki hata çözüldü. C dili aşırı yüklenmiş fonksiyonları kabul etmediği için isimleri değiştirdim.'
Ve şu hatayı da veriyor:
Alıntı:
cppwrapper.h:18: error: conflicting declaration of C function ‘ExampleHandle init_Example(const char*)’
ExampleHandle EXPORTCALL init_Example(const char* str);
^~~~~~~~~~~~
Tanımın çelişkili olduğunu söylüyor lakin nereden hata var onu anlamadım. Kullandığım döküman şurada ve "C/C++ wrapping: second solution" bölümü altındaki kodlar gibi yapıyorum: ftp://ftp.freepascal.org/fpc/docs-pdf/CinFreePascal.pdf.
Teşekkürler.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply