۰۷-اردیبهشت-۱۳۹۵, ۱۹:۰۹:۲۹
سلام
شاید یکم سخت بتونم منظورمو منتقل کنم
2 تاپروژه فرض کنید
یکیش در ++C که قراره بصورت فایل lib.* کامپایل بشه
پروژه دوم هم قراره از همون فایل lib استفاده کنه.
داخل پروژه ++C یه کلاس تعریف شده به فرم زیر
و یدونه تابع داریم که در ++C نوشته شده و قراره از C فراخوانی بشه:
اگر دقت کنید آرگومان دوم تابع از جنس کلاس MemBufferObject هستش
چون این تابع قراره از C فراخوانی بشه، سوالم اینه که چطوری در زبون C (نه ++C) ، از کلاسی که در ++C نوشته شده، یه متغییر درست کنم و به کمک class constructor اون متغییر رو با داده خودم مقدار دهی کنم؟
چند تا سورس کد بررسی کردم، توی هدر فایلی که به خورد برنامه C داده بودن، کلاس رو بصورت struct تعریف کرده بودن
ولی مشکل اینجاست که اگه بصورت struct تعریف بشه، از داخل برنامه C چطوری باید به تابع class constructor ای که در ++C پیاده شده، (از درون برنامه C) دسترسی پیدا کنم؟
شاید یکم سخت بتونم منظورمو منتقل کنم
2 تاپروژه فرض کنید
یکیش در ++C که قراره بصورت فایل lib.* کامپایل بشه
پروژه دوم هم قراره از همون فایل lib استفاده کنه.
داخل پروژه ++C یه کلاس تعریف شده به فرم زیر
کد:
class MemBufferObject
{
private:
char *m_pData;
int m_size;
int m_offset;
public:
inline MemBufferObject(char *pSource, int size) : m_pData(pSource), m_size(size), m_offset(0) {}
inline int Read(char *pBuffer, int size)
{
// Don't worry about reading partial data here...
if (m_offset + size <= m_size)
{
::memcpy(pBuffer, &m_pData[m_offset], size);
m_offset += size;
return size;
}
return -1;
}
};
کد:
SQInteger BufferRead(SQUserPointer pMemObject, SQUserPointer pDest, SQInteger size)
{
// Assume that our source is a MemBufferObject
MemBufferObject *pBuffer = reinterpret_cast<MemBufferObject *>(pMemObject);
return pBuffer->Read(reinterpret_cast<char *>(pDest), size);
}
و یدونه تابع داریم که در ++C نوشته شده و قراره از C فراخوانی بشه:
کد:
SQRESULT LoadScript(HSQUIRRELVM vm, MemBufferObject *pSource)
{
return sq_readclosure(vm, BufferRead, (SQUserPointer)(pSource));
}
اگر دقت کنید آرگومان دوم تابع از جنس کلاس MemBufferObject هستش
چون این تابع قراره از C فراخوانی بشه، سوالم اینه که چطوری در زبون C (نه ++C) ، از کلاسی که در ++C نوشته شده، یه متغییر درست کنم و به کمک class constructor اون متغییر رو با داده خودم مقدار دهی کنم؟
چند تا سورس کد بررسی کردم، توی هدر فایلی که به خورد برنامه C داده بودن، کلاس رو بصورت struct تعریف کرده بودن
ولی مشکل اینجاست که اگه بصورت struct تعریف بشه، از داخل برنامه C چطوری باید به تابع class constructor ای که در ++C پیاده شده، (از درون برنامه C) دسترسی پیدا کنم؟