C ++ DLL崩溃(我认为读/写崩溃相关)

时间:2012-05-05 11:04:07

标签: c++

有点奇怪的情况。我有一个C ++ DLL,它是为我注入第三方应用程序并检索信息。这个DLL最初只会输出信息,但我需要在我制作的VB应用程序中使用它。

所以我创建了另一个C ++ dll,它有来自原始C ++ dll的2个回调函数..这是发送信息的地方。并且具有我的VB应用程序可以调用以检索该信息的功能。

我对C ++并不是很擅长...我已经搞砸了一段时间并且降低了崩溃的发生但是它仍然发生(尽管很少)。我认为在某些时候,2个不同的部分正在读取或写入导致崩溃的同一地址。 这是代码:

这是一个全局cstring,用于存储来自回调函数的信息并发送到VB

class Global
{
public:

    static CString &  get_allstacks() {
        static CString allstacks; return allstacks; }
};

这是我从VB调用的函数,它向我发送信息。

BSTR _stdcall vbFunction()
{
    BSTR Message;
    int len = Global::get_allstacks().GetLength();
    Message = SysAllocStringByteLen ((LPCTSTR)Global::get_allstacks(), len+1 );
    return Message;

}

这是回调函数之一..还有另一个函数也将信息放入同一个全局cstring中。在此函数中,当cstring达到> 100k长度时,它也会调整大小。请注意,调整大小代码仅在1个回调中。

HANDLE OnInfo(SendInfo* info)
{
    strcpy_s(tempID,200,info->GameId);
    CString stringTempID="";
    stringTempID=tempID;

    CString tempRound="";
    strcpy_s(round,200,info->round);
    tempRound=round;

    // get a reference to global string
    CString & allstacks= Global::get_allstacks();
    // add new info
    allstacks+=  stringTempID + tempRound + "\n";

    //resize cstring
    int len =allstacks.GetLength();
    if  (len > 100000)
    {
        int nstart = 0;
        int npos  = 0;

        while ((npos = allstacks.Find(_T('\n'), nstart)) < len - 50000) {
            nstart = npos+1;
        }   

        allstacks= allstacks.Right(nstart);
    }

    return 0;
}

这是必要的

char* tempID =new char[255];
char* round=new char[255];

无论如何,崩溃是非常罕见的,当调用vbFunction时发生了几次但是大部分时间都没有调用vbFunction,所以我认为问题也发生在回调函数中。

0 个答案:

没有答案