January 03, 2018

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. ]

January 03, 2018

Sanırım 'extern "C"' baskın çıkıyor ve stdcall gözardı ediliyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]