【发布时间】:2015-09-29 15:18:14
【问题描述】:
我在托管 c++ 中创建了一个类库。据我所见,任何地方都没有静态函数,但是当从非托管 C++ 代码调用类中的方法时,调试器坚持认为该方法是静态方法。这意味着当我尝试使用“this”调用成员函数时,我得到了 System.NullReferenceException。
有没有人使用过认为它是静态的非静态函数?
.h 声明
class __declspec(dllexport) DataManager
{
public:
virtual int DataSize() = 0;
virtual int DataFileIndexNumber() = 0;
};
class __declspec(dllexport) RowIDManager : DataManager
{
public:
virtual int KeyOffset() = 0;
virtual int KeyFileIndexNumber() = 0;
virtual bool LoadRecordByKey(int key, HDDBSession hSession = NULL);
};
class __declspec(dllexport) Referral : protected REFERRAL_REC, RowIDManager
{
private:
virtual int DataSize() { return sizeof(REFERRAL_REC); }
virtual int DataFileIndexNumber(){ return FN_REFERRAL_DATA; }
virtual int KeyOffset(){ return FIELDOFFSET(REFERRAL_REC, ReferralID); }
virtual int KeyFileIndexNumber(){ return FN_REFERRAL_IDX1; }
public:
Referral();
Referral(const REFERRAL_REC* rec);
int LoadById(HDDBSession hSession, int refId);
clip ... other member functions
};
}
c++代码
using namespace DataObjectLibrary;
bool RowIDManager::LoadRecordByKey(int key, HDDBSession hSession)
{
bool retVal = false;
HDDBFile hRefFile;
HDDBSession newSession = hSession;
if (newSession == NULL)
newSession = DDB_StartSession(DDB_MULTI_USER);
hRefFile = DDB_OpenFile(newSession, this->DataFileIndexNumber());
if (hRefFile)
{ //This if statement throws the exception for the "this->"
if (DDB_FindRec(hRefFile, this->KeyFileIndexNumber(), &key, this))
retVal = true;
DDB_CloseFile(hRefFile);
}
if (hSession == NULL)
DDB_EndSession(newSession);
return retVal;
}
【问题讨论】:
标签: c++ static-methods managed-c++ non-static